php设计模式之工厂方法模式
工厂方法模式
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
模式结构
工厂方法模式包含如下角色:
- Product:抽象产品
- ConcreteProduct:具体产品
- Factory:抽象工厂
- ConcreteFactory:具体工厂
结构图
PHP代码实现
1 <?php 2 //抽象产品 3 abstract class Operation 4 { 5 private $numA,$numB; 6 public function __set($name,$value){ 7 $this->$name=$value; 8 } 9 10 public function __get($name){ 11 return $this->$name; 12 } 13 abstract public function getResult(); 14 } 15 16 //具体产品 17 class OperateAdd extends Operation 18 { 19 public function getResult(){ 20 $result=$this->numA+$this->numB; 21 return $result; 22 } 23 } 24 class OperateSub extends Operation 25 { 26 public function getResult(){ 27 $result=$this->numA-$this->numB; 28 return $result; 29 } 30 } 31 32 //抽象工厂 33 interface Factory 34 { 35 public function createOperation(); 36 } 37 38 //具体工厂 39 class AddFactory implements Factory 40 { 41 public function createOperation() 42 { 43 return new OperateAdd(); 44 } 45 } 46 class SubFactory implements Factory 47 { 48 public function createOperation() 49 { 50 return new OperateSub(); 51 } 52 } 53 $a=new AddFactory(); 54 $b=$a->createOperation(); 55 $b->numA=1; 56 $b->numB=5; 57 $c=$b->getResult(); 58 var_dump($c);
运行结果
int 6