简单工厂模式实例与讲解
2015-11-14 17:35
393 查看
abstract class ApptEncoder{ abstract function encode(); } class BloggsApptEncoder extends ApptEncoder{ function encode(){ return 'this is bloggs object'; } } class MegaApptEncoder extends ApptEncoder{ function encode(){ return 'this is mega object'; } } class CommsManager{ const BLOGGS = 1; const MEAG = 2; private $mode = 1; function __construct($mode){ $this->mode; } function getAppEncoder(){ switch ($this->mode){ case (self::BLOGGS): return new BloggsApptEncoder(); case (self::MEAG): return new MegaApptEncoder(); } } } $comms = new CommsManager(CommsManager::MEAG); $apptEncoder = $comms->getAppEncoder(); print_r($apptEncoder->encode()); //输出:this is bloggs object
以上属于典型的简单工厂模式,可以适用于简单的运行模式,存在一定的缺陷,当我们需要在CommsManager中新增一个模式方法时,我们不得不再次进行模式的判断,CommsManager如下(我们新增了getHeaderText):
class CommsManager{ const BLOGGS = 1; const MEAG = 2; private $mode = 1; function __construct($mode){ $this->mode; } function getAppEncoder(){ switch ($this->mode){ case (self::BLOGGS): return new BloggsApptEncoder(); case (self::MEAG): return new MegaApptEncoder(); } } function getHeaderText(){ switch ($this->mode){ case (self::BLOGGS): return 'this is bloggs headerText'; case (self::MEAG): return 'this is meag headerText'; } } }
从上面我们可以看出,我们使用了重复的代码判断条件,我们可以对此进行简化和进一步的改进,也就是我们的工厂方法模式
相关文章推荐
- android 常见的消息处理机制
- 如何使用iAd在应用程序中展示Banner广告
- Handler
- opencv学习笔记(十七)——线性滤波
- Android与Servlet交互:Android访问Servlet,并使用解析传回来的Json数据
- oracle建表实现序列ID自增
- 常用Jquery前端操作
- 树形结构
- sys_connect_by_path函数
- 使用puppet控制客户端主机创建文件以及安装指定软件包
- 在什么时候将函数的参数设为引用类型?
- xml基本操作和保存配置文件应用实例
- [C++]百钱买百鸡
- HDOJ--5500--Reorder the Books
- 使用windows的beep函数演奏音乐
- Web性能测试基本指标
- Maven项目无法读取src/main/resources下properties资源文件
- 【拔苗计划】linux学习笔记——iostat命令学习
- GPU图形处理管线、图形硬件接口(OpenGL)与可编程图形渲染语言(CG)的关系
- 计算树的深度,存储结构是二叉链表