工厂方法模式: 在学习工厂方法模式之前请首先阅读简单工厂模式
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.
工厂方法模式是简单工厂模式的进一步抽象和推广
工厂方法模式的几个需要的对象:
1、抽象工厂
2、具体工厂:实现抽象工厂接口列出的方法,并且每个工厂对应各自的产品
3、抽象产品
4、具体产品
简单工厂模式里面的果园的例子,可以改写成工厂方法模式 , 大家可以自己实验。
1 <?php 2 3 //此实例是根据女娲造人写的 4 5 //首先定义一个全局的工厂接口 6 //由阴绳 阳绳来继承 都要实现举绳子这个方法 7 interface nvwaRope{ 8 public function liftRope($name); 9 }10 11 //定义阴绳 来继承 nvwaRope12 class yinRope implements nvwaRope{13 public function liftRope($name){14 return new boy($name);15 }16 }17 18 //定义阳绳 19 class yangRope implements nvwaRope{20 public function liftRope($name){21 return new girl($name);22 }23 }24 25 26 //定义一个人的抽象接口27 interface people{28 public function eat();29 public function getName();30 }31 32 33 abstract class abstractPeople implements people{34 private $name;35 36 public function __construct($name){37 $this->name = $name;38 }39 40 public function eat(){41 echo $this->name . " eat";42 }43 44 public function getName(){45 echo $this->name;46 return $this->name;47 }48 49 //检查是否有胸50 public function checkChest(){51 return $this->haveChest;52 }53 }54 55 class boy extends abstractPeople{56 public $haveChest = false; //男孩没有胸57 }58 59 class girl extends abstractPeople{60 public $haveChest = true; //女孩有胸61 }62 63 64 65 //使用方式66 67 //首先获取工厂的实例 也就是阴绳或者阳绳的实例68 $yinRope = new yinRope();69 70 $people = $yinRope->liftRope("张三");71 echo $people->eat();72 echo $people->getName();73 var_dump($people->checkChest());