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