php设计模式 — 简单工厂模式(静态工厂方法模式)

概念

简单工厂模式 【静态工厂方法模式】(Static Factory Method)
是类的创建模式

工厂模式的几种形态:
  1、简单工厂模式(Simple Factory) |又叫做  静态工厂方法模式(Static Factory Method)
  2、工厂方法模式(Factory Method) |又叫做 多态性工厂模式(Polymorphic Factory)
  3、抽象工厂模式(Abstract Factory) |又叫做 工具箱模式(ToolKit)

配图

代码实例

直接将代码运行即可,都是测试过的

  1 <?php
  2 
  3 /**
  4  * 一个事例
  5  *
  6  * 一个农场,要向市场销售水果
  7  * 农场里有三种水果 苹果、葡萄
  8  * 我们设想:1、水果有多种属性,每个属性都有不同,但是,他们有共同的地方 |  生长、种植、收货、吃
  9  *              2、将来有可能会增加新的水果、我们需要定义一个接口来规范他们必须实现的方法
 10  *              3、我们需要获取某个水果的类,要从农场主那里去获取某个水果的实例,来知道如何生长、种植、收货、吃
 11  */
 12 
 13 
 14 /**
 15  * 虚拟产品接口类
 16  * 定义好需要实现的方法
 17  */
 18 
 19 interface fruit{
 20 
 21     /**
 22      * 生长
 23      */
 24     public function grow();
 25 
 26     /**
 27      * 种植
 28      */
 29     public function plant();
 30 
 31     /**
 32      * 收获
 33      */
 34     public function harvest();
 35 
 36     /**
 37      * 吃
 38      */
 39     public function eat();
 40     
 41 }
 42 
 43 
 44 /**
 45  * 定义具体产品类 苹果
 46  * 首先,我们要实现所继承的接口所定义的方法
 47  * 然后定义苹果所特有的属性,以及方法
 48  */
 49 class apple implements fruit{
 50 
 51     //苹果树有年龄
 52     private $treeAge;
 53 
 54     //苹果有颜色
 55     private $color;
 56 
 57     public function grow(){
 58         echo "grape grow";
 59     }
 60 
 61     public function plant(){
 62         echo "grape plant";
 63     }
 64 
 65     public function harvest(){
 66         echo "grape harvest";
 67     }
 68 
 69     public function eat(){
 70         echo "grape eat";
 71     }
 72 
 73     //取苹果树的年龄
 74     public function getTreeAge(){
 75         return $this->treeAge;
 76     }
 77 
 78     //设置苹果树的年龄
 79     public function setTreeAge($age){
 80         $this->treeAge = $age;
 81         return trie;
 82     }
 83 
 84 }
 85 
 86 /**
 87  * 定义具体产品类 葡萄
 88  * 首先,我们要实现所继承的接口所定义的方法
 89  * 然后定义葡萄所特有的属性,以及方法
 90  */
 91 class grape implements fruit{
 92 
 93 
 94     //葡萄是否有籽
 95     private $seedLess;
 96 
 97     public function grow(){
 98         echo "apple grow";
 99     }
100 
101     public function plant(){
102         echo "apple plant";
103     }
104 
105     public function harvest(){
106         echo "apple harvest";
107     }
108 
109     public function eat(){
110         echo "apple eat";
111     }
112 
113     //有无籽取值
114     public function getSeedLess(){
115         return $this->seedLess;
116     }
117 
118     //设置有籽无籽
119     public function setSeedLess($seed){
120         $this->seedLess = $seed;
121         return true;
122     }
123 
124 }
125 
126 
127 /**
128  *农场主类 用来获取实例化的水果
129  *
130  */
131 class farmer{
132 
133     //定义个静态工厂方法
134     public static function factory($fruitName){
135         switch ($fruitName) {
136             case ‘apple‘:
137                 return new apple();
138                 break;
139             case ‘grape‘:
140                 return new grape();
141                 break;
142             default:
143                 throw new badFruitException("Error no the fruit", 1);
144                 break;
145         }
146     }
147 }
148 
149 class badFruitException extends Exception{
150     public $msg;
151     public $errType;
152     public function __construct($msg = ‘‘ , $errType = 1){
153         $this->msg = $msg;
154         $this->errType = $errType;
155     }    
156 }
157 
158 
159 /**
160  * 获取水果实例化的方法
161  */
162 try{
163     $appleInstance = farmer::factory(‘apple‘);
164     var_dump($appleInstance);
165 }catch(badFruitException $err){
166     echo $err->msg . "_______" . $err->errType;
167 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。