美文网首页
抽象工厂模式

抽象工厂模式

作者: nummycode | 来源:发表于2017-07-07 11:03 被阅读11次

    抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

    当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

    每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。

    import os
    import abc
    import six
    
    class Animal(six.with_metaclass(abc.ABCMeta, object)):
        """ clients only need to know this interface for animals"""
        @abc.abstractmethod
        def sound(self, ):
            pass
    
    
    class AnimalFactory(six.with_metaclass(abc.ABCMeta, object)):
        """clients only need to know this interface for creating animals"""
        @abc.abstractmethod
        def create_animal(self,name):
            pass
    
    
    class Dog(Animal):
        def __init__(self, name):
            self.name = name
        def sound(self, ):
            print("bark bark")
    
    
    class DogFactory(AnimalFactory):
        def create_animal(self,name):
            return Dog(name)
    
    
    class Cat(Animal):
        def __init__(self, name):
            self.name = name
        def sound(self, ):
            print("meow meow")
    
    
    class CatFactory(AnimalFactory):
        def create_animal(self,name):
            return Cat(name)
    
    
    class Animals(object):
        def __init__(self,factory):
            self.factory = factory
        def create_animal(self, name):
            return self.factory.create_animal(name)
    
    
    if __name__ == '__main__':
        atype = raw_input("what animal (cat/dog) ?").lower()
        if atype == 'cat':
            animals = Animals(CatFactory())
        elif atype == 'dog':
            animals = Animals(DogFactory())
        a = animals.create_animal('bulli')
        a.sound()
    
    

    相关文章

      网友评论

          本文标题:抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/dselhxtx.html