php的设计模式------工厂模式
Posted myvic
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的设计模式------工厂模式相关的知识,希望对你有一定的参考价值。
1.工厂模式简介
属于创建型模式。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
主要解决的问题:接口选择的问题。
2.分类
2.1 简单工厂模式
接口:interface 具体:class 工厂:factory
// 1 创建一个接口 interface Shape{ const NAME = ‘vic‘; public function draw(); } // 2.实体类 class Rectangle implements Shape{ public function draw(){ echo ‘Rectangle‘; } } class Square implements Shape{ public function draw(){ echo ‘Square‘; } } class Circle implements Shape{ public function draw(){ echo ‘Circle‘; } } // 新的图形,可以在此创建类,扩展
// 3.创建工厂 class ShapeFactory { public static function getShape( string $shapeType){ if( empty($shapeType) ){ return ; } switch( strtolower($shapeType) ){ case ‘rectangle‘: return new Rectangle(); break; case ‘Square‘: return new Square(); break; case ‘circle‘: return new Circle(); break; //如果有其他图形,可以扩展 } return ; } } $shape = shapeFactory::getShape(‘Rectangle‘); $shape->draw();
2.2抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
接口:interface 实体:class 抽象工厂:interface Factory 工厂实体:class Factory 创建工厂: factory
// 1 创建一个接口 interface Shape{ const NAME = ‘vic‘; public function draw(); } // 1.2 颜色接口 interface Color{ function fill(); } // 2.实体类 class Rectangle implements Shape{ public function draw(){ echo ‘Rectangle‘; } } class Square implements Shape{ public function draw(){ echo ‘Square‘; } } class Circle implements Shape{ public function draw(){ echo ‘Circle‘; } } // 2.2 颜色实体类 class Red implements Color{ public function fill(){ echo ‘Red‘; } } class Green implements Color{ public function fill(){ echo ‘Green‘; } } class Blue implements Color{ public function fill(){ echo ‘Blue‘; } } // 3 抽象工厂类 interface Factory{ function getShape( string $shapeType ); function getColor( string $color ); } // 4.工厂实体类 class ShapeFactory implements Factory{ public function getShape( string $shapeType){ if( empty($shapeType) ){ return ; } switch( strtolower($shapeType) ){ case ‘rectangle‘: return new Rectangle(); break; case ‘Square‘: return new Square(); break; case ‘circle‘: return new Circle(); break; //如果有其他图形,可以扩展 } return ; } public function getColor( string $color ){ //这里违背了接口隔离原则,此方法在此类中无用,却被迫实现 return ; } } class ColorFactory implements Factory{ public function getShape( string $shapeType ){ return ; } public function getColor( string $color ){ if( empty($color )){ return ; } switch ( strtolower($color) ) { case ‘red‘: return new Red(); break; case ‘green‘: return new Green(); break; case ‘blue‘: return new Blue(); break; } return ; } } // 5 实现工厂 class FactoryProduct{ public static function getFactory( $choice ){ if( empty(strcasecmp($choice,‘shape‘)) ){ return new ShapeFactory(); } else if ( empty(strcasecmp($choice, ‘color‘)) ){ return new ColorFactory(); } return ; } } try{ $factory = FactoryProduct::getFactory(‘shape‘); $shape = $factory->getShape(‘circle‘); $shape->draw(); // } catch( Exception $e){ // php5 捕获异常,不可以捕获错误 // echo $e->getMessage(); // } } catch( Error $e){ // php7 可以捕获错误 var_dump($e->getMessage()); } // 捕获错误异常的方法 php5 function shutdown_function(){ $e = error_get_last(); // var_dump($e); } register_shutdown_function(‘shutdown_function‘);
以上是关于php的设计模式------工厂模式的主要内容,如果未能解决你的问题,请参考以下文章