爱程序网

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

来源: 阅读:

概念

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

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

配图

代码实例1

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

  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 }