工厂模式




问题:

客户端代码需要调用实际的对象,而对象的实例化需要根据配置不同生成不同的对象,如果这些过程直接在客户端上实现,当有新的对象进入,我们就必须修改客户端代码,久而久之,客户端上的代码势必出现不少if语句和对象的实例。这显然不是一种优雅的编程方式。所以我们需要一种方法将对象的具体实例工作与客户端上的业务逻辑解耦。

方法:

简单工厂模式

  simple_factory

优点:

1、将对象的实例化封装在工厂类中,客户端只需要调用工厂返回需要的对象;

缺点:

1、工厂类中仍然需要不少if语句根据配置生成对象,每当有新的产品对象加入都需要修改工厂类,这样违反了设计模式中对修改关闭的原则;

工厂模式

factory

优点:

1、每加入一个具体的产品类,不需要修改工厂方法

2、封装了产品的具体实例化过程;

缺点:

1、每加入一个新产品都需要另外添加一个对应的工厂类;

2、客户端代码需要if语句来判断调用哪个工厂方法返回产品,每当客户端需要新的产品时,需要加入新的if语句;

抽象工厂模式

abstract_factory

优点:

1,2同工厂模式;

3、对产品簇进行管理;

 

缺点:

同工厂模式

 

总结:

从各种模式可以看出,不管哪中模式都不能将if语句隐藏,无非是将if放在工厂类还是客户端中,这需要根据具体的需要和未来的需要来选择,没有绝对的解决方法,只有最有有效的方法;而现在最新版的PHP语言中加入了反射机制,可以让代码中的if隐藏了,这无疑软件设计的一大进步。

谢 懿茂
关于

IT浪潮瞬息万变,争做一名弄潮的程序员! QQ:2646739154

标签: ,

发表评论