php设计模式之简单工厂模式详解
程序员文章站
2022-06-03 17:22:53
本文以实例形式较为详细的介绍了php设计模式的简单工厂模式,对于进行php程序设计来说有很好的借鉴作用。具体如下:
一、概念
简单工厂模式 【静态工厂方法模式】(sta...
本文以实例形式较为详细的介绍了php设计模式的简单工厂模式,对于进行php程序设计来说有很好的借鉴作用。具体如下:
一、概念
简单工厂模式 【静态工厂方法模式】(static factory method)
是类的创建模式
工厂模式的几种形态:
1、简单工厂模式(simple factory)又叫做 静态工厂方法模式(static factory method)
2、工厂方法模式(factory method)又叫做 多态性工厂模式(polymorphic factory)
3、抽象工厂模式(abstract factory)又叫做 工具箱模式(toolkit)
二、配图分析:
三、代码实例
该实例代码经过测试可以运行,具体如下:
<?php /** * 一个事例 * * 一个农场,要向市场销售水果 * 农场里有三种水果 苹果、葡萄 * 我们设想:1、水果有多种属性,每个属性都有不同,但是,他们有共同的地方 | 生长、种植、收货、吃 * 2、将来有可能会增加新的水果、我们需要定义一个接口来规范他们必须实现的方法 * 3、我们需要获取某个水果的类,要从农场主那里去获取某个水果的实例,来知道如何生长、种植、收货、吃 */ /** * 虚拟产品接口类 * 定义好需要实现的方法 */ interface fruit{ /** * 生长 */ public function grow(); /** * 种植 */ public function plant(); /** * 收获 */ public function harvest(); /** * 吃 */ public function eat(); } /** * 定义具体产品类 苹果 * 首先,我们要实现所继承的接口所定义的方法 * 然后定义苹果所特有的属性,以及方法 */ class apple implements fruit{ //苹果树有年龄 private $treeage; //苹果有颜色 private $color; public function grow(){ echo "grape grow"; } public function plant(){ echo "grape plant"; } public function harvest(){ echo "grape harvest"; } public function eat(){ echo "grape eat"; } //取苹果树的年龄 public function gettreeage(){ return $this->treeage; } //设置苹果树的年龄 public function settreeage($age){ $this->treeage = $age; return trie; } } /** * 定义具体产品类 葡萄 * 首先,我们要实现所继承的接口所定义的方法 * 然后定义葡萄所特有的属性,以及方法 */ class grape implements fruit{ //葡萄是否有籽 private $seedless; public function grow(){ echo "apple grow"; } public function plant(){ echo "apple plant"; } public function harvest(){ echo "apple harvest"; } public function eat(){ echo "apple eat"; } //有无籽取值 public function getseedless(){ return $this->seedless; } //设置有籽无籽 public function setseedless($seed){ $this->seedless = $seed; return true; } } /** *农场主类 用来获取实例化的水果 * */ class farmer{ //定义个静态工厂方法 public static function factory($fruitname){ switch ($fruitname) { case 'apple': return new apple(); break; case 'grape': return new grape(); break; default: throw new badfruitexception("error no the fruit", 1); break; } } } class badfruitexception extends exception{ public $msg; public $errtype; public function __construct($msg = '' , $errtype = 1){ $this->msg = $msg; $this->errtype = $errtype; } } /** * 获取水果实例化的方法 */ try{ $appleinstance = farmer::factory('apple'); var_dump($appleinstance); }catch(badfruitexception $err){ echo $err->msg . "_______" . $err->errtype; }
希望本文所述实例对大家php程序设计有所帮助。