爱程序网

php设计模式 — 工厂方法模式(多态性工厂模式) (虚拟

来源: 阅读:

概念介绍:

工厂方法模式: 在学习工厂方法模式之前请首先阅读简单工厂模式
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.
工厂方法模式是简单工厂模式的进一步抽象和推广

工厂方法模式的几个需要的对象:

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());