工厂模式demo
来源:互联网 发布:c盘windows 编辑:程序博客网 时间:2024/05/16 19:43
<?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;}
阅读全文
0 0
- 工厂模式demo
- GOF23之工厂模式Demo
- 设计模式之 工厂模式(demo)
- 简单工厂模式和工厂方法模式Demo
- 设计模式-简单工厂(Demo)
- 设计模式-工厂方法(Demo)
- 设计模式-抽象工厂(Demo)
- 一个Demo理解工厂设计模式
- 设计模式最简Demo:策略模式 + 简单工厂模式
- 单例模式和工厂模式Demo简单演示
- 反射 + 抽象工厂模式切换DB数据源(附Demo)
- 工厂模式(factory Pattern)实现示例demo
- 学习笔记----设计模式之动态代理+工厂模式的混合使用简单demo
- 设计模式最简Demo:简单工厂模式[Simple Factory Pattern]
- 设计模式最简Demo:工厂方法模式[Factory Method Pattern]
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- MySQL分布式XA事务
- JVM调优之jstack找出最耗cpu的线程并定位代码
- poj1169 枚举
- 颜色转换
- SVN设置钩子函数
- 工厂模式demo
- Sciter:汉化右键菜单
- ios更改webView弹窗样式,有显示域名链接
- 将maven与MyEclipse相关联
- OpenJudge 2.5-8783 单词接龙
- 215. Kth Largest Element in an Array-Python
- F1V3.0-图形-拓扑连通性分析算法介绍
- 某项目自动化测试
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解