Python 设计模式系列之二: 创建型 Simple Factory 模式
2007-03-30 12:55:53 来源:WEB开发网图6
在简单厂模式中,充当工厂角色的类通常只会有一个方法,那就是用来创建具体产品对象的factory()。在某些特殊场合下,如果需要的话也可以考虑将工厂角色的功能交由抽象产品角色来替代完成,这时简单工厂模式的结构将如图7所示。
图7
在更极端的情况下,工厂角色、抽象产品角色和具体产品角色三者可以合并,即将所有的功能都交由具体产品类来统一完成。也就是说,简单工厂模式将退化成一个单独的具体产品类,这个类同时也是自身的工厂,负责创建自己的实例,如图8所示。
图8
这种退化的简单工厂模式从实质上讲等价于一个类,唯一不同的是在对象初始化时不再使用默认的构造方法,而是使用自定义的工厂方法,但这在许多场合下的意义并不是很大,尤其是对Python这种动态类型语言来说更是如此。由于退化后的模式并没有充分利用简单工厂模式的特点,所以最好慎重使用,当然也可以考虑用其它模式进行替代。
五、优势和不足
在简单工厂模式中,工厂类是整个模式的关键所在,它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来,仅仅只需要负责"消费"对象就可以了,而不必管这些对象究竟是如何创建以及如何组织的,这样就清晰了各自的职责和权力,有利于整个软件体系结构的优化。
不过,凡事有利就有弊,简单工厂模式的缺点也正体现在其工厂类上。由于工厂类集中了所有实例的创建逻辑,是一个无所不能的"全能类"(God Class),因此它对整个软件系统是至关重要的,如果这个类无法正常工作,其它部分可能都会受到牵连,正所谓"城门失火,殃及池鱼"。
将全部创建逻辑都集中到一个工厂类中还有另外一个缺点,那就是当系统中的具体产品类不断增多时,可能会出现要求工厂类根据不同条件创建不同实例的需求,这种对条件的判断和对具体产品类型的判断交织在一起,很难避免模块功能的蔓延,对系统的扩展和维护也非常不利。
简单工厂模式的这些缺点,在下次将要介绍的工厂方法(Factory Method)模式中得到了一定程度上的克服,好了,下次再见吧!
六、小结
创建型模式的目标是做到对象创建和组织的无关性,它可以细分为类的创建型模式和对象的创建型模式。简单工厂模式属于类的创建型模式,它可以根据外界所给定的信息,用工厂对象制造出某种特定产品类的实例。完整的简单工厂模式包含工厂、抽象产品和具体产品三个角色,但在实际运用时可以灵活掌握,对模型进行简单化。简单工厂模式的优点是它的工厂类能够负责所有对象的创建,而缺点则是工厂类的实现逻辑可能过于复杂。
更多精彩
赞助商链接