前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽象工厂模式

抽象工厂模式

作者头像
用户2936342
发布2018-08-27 14:36:12
2430
发布2018-08-27 14:36:12
举报
文章被收录于专栏:nummy

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

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

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

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.07.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档