详解设计模式中的工厂方法模式在Python程序中的运用
工厂方法(Factory Method)模式又称为虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实体化哪一个类。 简单说来,工厂方法模式的作用就是可以根据不同的条件生成各种类的实例,这些实例通常属于多个相似的类型,并且具有共同的父类。工厂方法模式将这些实例的创建过程封装了起来,从而简化了客户程序的编写,并改善了软件体系结构的可扩展性,使得将来能够以最小的代价加入新的子类。工厂方法这一模式适合在如下场合中运用: 拿一个动物工厂来举例说明 class Animal(object): def eat(self,food): raise NotImplementedError() class Dog(Animal): def eat(self,food): print '狗吃',food class Cat(Animal): def eat(self,food): print '猫吃',food class AnimalFactory(object): def create_animal(self): raise NotImplementedError() class DogFactory(Animal): def create_animal(self): return Dog() class CatFactory(AnimalFactory): def create_animal(self): return Cat() def client(): animal_factory = DogFactory() animal = animal_factory.create_animal() animal.eat('肉骨头') animal_factory = CatFactory() animal = animal_factory.create_animal() animal.eat('鱼骨头') 下面是简单工厂模式的实现: class Animal(object): def eat(self,food def create_animal(name): if name == 'dog': return Dog() elif name == 'cat': return Cat() def client(): animal = create_animal('dog') animal.eat('肉骨头') animal = create_animal('cat') animal.eat('鱼骨头') 看起来工厂方法模式要复杂很多啊,也没觉得比简单工厂模式有什么好处,为什么还要用工厂方法模式呢? 简单工厂模式的优点很明显,工厂函数封装了逻辑判断,客户端使用负担要小很多。相应的问题也很明显,要增加新的产品类型,就需要修改工厂函数,这违背了开闭原则。 但是工厂方法模式似乎绕了一圈又回到原始时代了,下面写不就行了吗,何必外面套一层Factory: class Animal(object): def eat(self,food def client(): dog = Dog() dog.eat('肉骨头') cat = Cat() cat.eat('鱼骨头') 工厂方法模式,对于需要做强类型检查的语言比如Java、C++等在组织代码时是有好处的。对于Python这种动态语言来说,感觉体现不出太多价值,或许我还没有理解工厂方法模式的真谛。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |