简单工厂模式 【静态工厂方法模式】(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 }