php设计模式 — 工厂方法模式(多态性工厂模式) (虚拟构造子模式)
概念介绍:
工厂方法模式: 在学习工厂方法模式之前请首先阅读简单工厂模式
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.
工厂方法模式是简单工厂模式的进一步抽象和推广
工厂方法模式的几个需要的对象:
1、抽象工厂
2、具体工厂:实现抽象工厂接口列出的方法,并且每个工厂对应各自的产品
3、抽象产品
4、具体产品
工厂方法模式里面的果园的例子,可以改写成工厂方法模式 , 大家可以自己实验。
案例图:
代码实例:
1 <?php 2 3 //此实例是根据女娲造人写的 4 5 //首先定义一个全局的工厂接口 6 //由阴绳 阳绳来继承 都要实现举绳子这个方法 7 interface nvwaRope{ 8 public function liftRope($name); 9 } 10 11 //定义阴绳 来继承 nvwaRope 12 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());
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。