工厂方法及其设计原则
2015-10-27 16:52
537 查看
一、第一个设计模式原则:按接口编程
Interface IAlpha 接口名
Class Alpha 实现接口
Variable useAlpha 实例化新的Alpha
第二个设计模式原则:优先选择对象组合而不是类继承
在大程序当中,组合可以避免维护多个继承层次上的各个子类, 而且还可以避免可能导致的错误,例如:父类的一个改变会逐级向下传递到子类实现,这可能会影响子类使用的某个算法。
因此要避免使用继承形成一长串子类、孙子类、曾子类等,设计模式方法建议使用浅继承。
二、工厂方法:通过一个工厂(Creator)实例化对象,从而将实例化过程与请求者分离。
参数化工厂方法设计模式与一般的工厂方法设计模式的主要区别之一是客户包含工厂和产品的引用,在参数化请求中,Client必须指定产品,而不知是好产品工厂。
使用设计模式的一大好处就是可以很容易地对类做出改变,而不会破坏更大的程序,之所以能够做出改变,在于保持接口不变,只改变其内容。
Interface IAlpha 接口名
Class Alpha 实现接口
Variable useAlpha 实例化新的Alpha
第二个设计模式原则:优先选择对象组合而不是类继承
在大程序当中,组合可以避免维护多个继承层次上的各个子类, 而且还可以避免可能导致的错误,例如:父类的一个改变会逐级向下传递到子类实现,这可能会影响子类使用的某个算法。
因此要避免使用继承形成一长串子类、孙子类、曾子类等,设计模式方法建议使用浅继承。
二、工厂方法:通过一个工厂(Creator)实例化对象,从而将实例化过程与请求者分离。
内容 | 1.、提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤; 2、工厂模式 实际上就是建立一个统一的类实例化的函数接口。统一调用,统一控制; 3、工厂模式是php项目开发中,最常用的设计模式,一般会配合单例模式一起使用,来加载php类库中的类。 |
应用场景 | 1. 我们拥有一个Json类,String类,Xml类。 2. 如果我们不使用工厂方式实例化这些类,则需要每一个类都需要new一遍,过程不可控,类多了,到处都是new的身影 3. 引进工厂模式,通过工厂统一创建对象实例。 //如果你希望实例化对象的子类可能发生变化就使用工厂模式 |
实例代码 | 1. <?php 2. //工厂模式 提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤 3. //字符串类 4. class String { 5. public function write() {} 6. } 7. //Json类 8. class Json { 9. public function getJsonData() {} 10. } 11. //xml类 12. class Xml { 13. public function buildXml() {} 14. } 15. //工厂类 16. class Factory { 17. public static function create($class) { 18. return new $class; 19. } 20. } 21. Factory::create("Json"); //获取Json对象 |
工厂的工作 | 第一步是建立工厂:creator接口(是模式中的第一个参与者,使用一个抽象类作为creator接口) abstract class creator { //构建并返回由一个按Product接口实现的产品对象 protected abstract function factoryMethod();//返回一个产品 public function startFactory(){ $mfg = $this->factoryMethod(); return $mfg;//返回一个产品(product) } } |
使用设计模式的一大好处就是可以很容易地对类做出改变,而不会破坏更大的程序,之所以能够做出改变,在于保持接口不变,只改变其内容。
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- PropertyChangeListener简单理解
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- PHP数据库长连接mysql_pconnect的细节
- 浅谈设计模式的学习
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP