代码改变世界

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

2014-09-05 18:32  爱情香烟  阅读(961)  评论(3编辑  收藏  举报

概念介绍:

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

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

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