您的位置:首页 > 编程语言 > PHP开发

工厂方法及其设计原则

2015-10-27 16:52 537 查看
一、第一个设计模式原则:按接口编程

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)

             }

         }

 

 

参数化工厂方法设计模式与一般的工厂方法设计模式的主要区别之一是客户包含工厂和产品的引用,在参数化请求中,Client必须指定产品,而不知是好产品工厂。

使用设计模式的一大好处就是可以很容易地对类做出改变,而不会破坏更大的程序,之所以能够做出改变,在于保持接口不变,只改变其内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息