亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python重溫設計模式===>創建型

2019-11-11 05:49:00
字體:
來源:轉載
供稿:網友

前面c++粗略學習過一次,忘記了,現在回想回想。

Github:https://github.com/faif/python-patterns

simple_factory.py

#!/usr/bin/env python# encoding: utf-8"""簡單工廠模式增加操作:    1. 增加對應子類    2. 修改工廠類"""class Operation(object):    @PRoperty    def number_a(self):        return self.__number_a    @number_a.setter    def number_a(self, value):        self.__number_a = value    @property    def number_b(self):        return self.__number_b    @number_b.setter    def number_b(self, value):        self.__number_b = valueclass OperationAdd(Operation):    def get_result(self):        return self.number_a + self.number_bclass OperationSub(Operation):    def get_result(self):        return self.number_a - self.number_bclass OperationFactory(object):    @staticmethod    def create_operation(operate):        if operate == "+":            return OperationAdd()        elif operate == "-":            return OperationSub()if __name__ == '__main__':    op = OperationFactory.create_operation('+')    op.number_a = 10    op.number_b = 5    print op.get_result()abstract_factory.py
#!/usr/bin/env python# encoding: utf-8"""抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口, 而無需指定他們具體的類- 優點: 易于交換產品, 具體工廠配置不同的產品- 優點: 讓具體的創建實例過程與客戶端分離, 客戶端是通過它們的抽象接口操縱實例, 產品的具體類名也被具體工廠的實現分離, 不會出現在客戶端的代碼中"""from abc import ABCMeta, abstractmethodclass AbstractProductA(object):    """    抽象產品, 可能擁有多種實現    """    def __init__(self, name):        self.name = name    def __str__(self):        return "ProductA: %s" % self.nameclass ConcreteProductA1(AbstractProductA):    passclass ConcreteProductA2(AbstractProductA):    passclass AbstractProductB(object):    """    抽象產品, 可能擁有多種實現    """    def __init__(self, name):        self.name = name    def __str__(self):        return "ProductB: %s" % self.nameclass ConcreteProductB1(AbstractProductB):    passclass ConcreteProductB2(AbstractProductB):    passclass AbstractFactory(object):    """    抽象工廠接口, 包含所有產品創建的抽象方法    """    __metaclass__ = ABCMeta    @abstractmethod    def create_product_a(self):        pass    @abstractmethod    def create_product_b(self):        passclass ConcreteFactory1(AbstractFactory):    """    具體工廠, 創建具有特定實現的產品對象    """    def create_product_a(self):        return ConcreteProductA1("PA1")    def create_product_b(self):        return ConcreteProductB1("PB1")class ConcreteFactory2(AbstractFactory):    def create_product_a(self):        return ConcreteProductA2("PA2")    def create_product_b(self):        return ConcreteProductB2("PB2")if __name__ == '__main__':    factory = ConcreteFactory2()    product_a = factory.create_product_a()    print product_abuilder.py
#!/usr/bin/env python# encoding: utf-8"""建造者模式將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創建不同的表示- 用戶只需指定需要建造的類型, 不需要知道具體地建造過程和細節- 建造者模式是在當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時適用的模式"""from abc import ABCMeta, abstractmethodclass Product(object):    """    具體產品    """    def __init__(self):        self.__parts = []    def add(self, part):        self.__parts.append(part)    def show(self):        print '-'.join(self.__parts)class Builder(object):    """    為創建一個product對象的各個部件指定的抽象接口    """    __metaclass__ = ABCMeta    @abstractmethod    def build_part_1(self):        pass    @abstractmethod    def build_part_2(self):        pass    @abstractmethod    def get_result(self):        passclass BuilderA(Builder):    def __init__(self):        self.__product = Product()    def build_part_1(self):        self.__product.add("partA1")    def build_part_2(self):        self.__product.add("partA2")    def get_result(self):        return self.__productclass BuilderB(Builder):    def __init__(self):        self.__product = Product()    def build_part_1(self):        self.__product.add("partB1")    def build_part_2(self):        self.__product.add("partB2")    def get_result(self):        return self.__productclass Director(object):    @staticmethod    def construct(builder):        builder.build_part_1()        builder.build_part_2()if __name__ == '__main__':    ba = BuilderA()    bb = BuilderB()    Director.construct(ba)    product = ba.get_result()    product.show()    Director.construct(bb)    product = bb.get_result()    product.show()factory_method.py
#!/usr/bin/env python# encoding: utf-8"""工廠方法定義一個用于創建對象的接口, 讓子類決定實例化哪個類工廠方法使一個類的實例化延遲到其子類如果存在變更, 改creator即可"""from abc import ABCMeta, abstractmethodclass Product(object):    """    定義工廠方法所創建的對象接口    """    __metaclass__ = ABCMeta    @abstractmethod    def echo(self):        passclass ConcreteProductA(Product):    """    具體的產品, 實現了product的接口    """    def echo(self):        print "product A"class ConcreteProductB(Product):    """    具體的產品, 實現了product的接口    """    def echo(self):        print "product B"class Creator(object):    """    聲明了工廠方法, 該方法返回一個Product類型的對象    """    __metaclass__ = ABCMeta    @abstractmethod    def create(self):        passclass ConcreteCreatorA(Creator):    """    重定義, 返回一個ConcreteProduct實例    """    def create(self):        return ConcreteProductA()class ConcreteCreatorB(Creator):    def create(self):        return ConcreteProductB()if __name__ == '__main__':    factory_a = ConcreteCreatorA()    product = factory_a.create()    product.echo()    factory_b = ConcreteCreatorB()    product = factory_b.create()    product.echo()prototype.py
#!/usr/bin/env python# encoding: utf-8"""原型模式用原型實例指定創建對象的種類, 并且通過拷貝這些原型創建新的對象- 原型模型其實是從一個對象再創建另外一個可定制的對象, 而且不需要知道任何創建細節- 一般在初始化信息不發生變化的情況下, 克隆是最好的辦法, 既隱藏了對象創建的細節, 有提高了性能"""import copyfrom abc import ABCMeta, abstractmethodclass Prototype(object):    """    原型類, 聲明一個克隆自身的接口    """    __metaclass__ = ABCMeta    def __init__(self, id):        self.__id = id    @property    def id(self):        return self.__id    @id.setter    def id(self, value):        self.__id = value    @abstractmethod    def clone(self):        passclass ConcretePrototypeA(Prototype):    """    具體原型類, 實現一個克隆自身的操作    """    def clone(self):        # 淺拷貝        return copy.copy(self)class ConcretePrototypeB(Prototype):    """    具體原型類, 實現一個克隆自身的操作    """    def clone(self):        return copy.copy(self)if __name__ == '__main__':    ca = ConcretePrototypeA(1)    c2 = ca.clone()    print c2.idsingleton.py
#!/usr/bin/env python# encoding: utf-8"""單例模式保證一個類僅有一個實例, 并提供一個訪問他的全局訪問點TODO: 如果是多線程, 要考慮加鎖"""class Singleton(type):    _instances = {}    def __call__(cls, *args, **kwargs):        if cls not in cls._instances:            cls._instances[cls] = super(Singleton, cls).__call__(*args, **                                                                 kwargs)        return cls._instances[cls]#Python2class MyClass(object):    __metaclass__ = Singletonif __name__ == '__main__':    a = MyClass()    b = MyClass()    print a == b    print a is b


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一福利网| 久久九九有精品国产23| 欧美人交a欧美精品| 日韩在线精品视频| 人人爽久久涩噜噜噜网站| 日韩国产激情在线| 国产欧美亚洲精品| 欧美中文字幕视频| 欧美高清激情视频| 欧美孕妇与黑人孕交| 国产精品亚洲自拍| 久久深夜福利免费观看| 国产精品视频yy9099| 亚洲国产成人91精品| 欧美色视频日本版| 91色琪琪电影亚洲精品久久| 日韩欧美国产中文字幕| 91精品久久久久久久久久久| 91久久久久久久| 欧美日韩国产123| 亚洲国产成人久久综合一区| 亚洲成人999| 中文字幕亚洲欧美日韩在线不卡| 疯狂做受xxxx欧美肥白少妇| 大伊人狠狠躁夜夜躁av一区| 亚洲欧美国产日韩天堂区| 久久99热精品这里久久精品| 中文字幕久精品免费视频| 国产精品福利片| 日韩在线视频网站| 亚洲欧美日韩精品久久| 91麻豆国产语对白在线观看| 一区二区三区视频免费在线观看| 久久91超碰青草是什么| 日韩经典中文字幕在线观看| 精品电影在线观看| 国产精品精品视频| 久久成人综合视频| 亚洲在线观看视频| 久久久久久久久爱| 久久99久久亚洲国产| 亚洲综合第一页| 91久久久久久久久久久| 成人国产精品色哟哟| 日韩电视剧在线观看免费网站| 国产精品视频1区| 亚洲天堂av在线播放| 日韩电影网在线| 欧美在线国产精品| 国产精品观看在线亚洲人成网| 国产成人精品视频在线| 日韩免费看的电影电视剧大全| 亚洲人成网站色ww在线| 精品女同一区二区三区在线播放| 久久久久久久久久久成人| 日韩va亚洲va欧洲va国产| 在线日韩欧美视频| 成人黄色片在线| 日本三级韩国三级久久| 久久久久久久久综合| 夜夜躁日日躁狠狠久久88av| 亚洲已满18点击进入在线看片| 97在线观看免费高清| 国色天香2019中文字幕在线观看| 亚洲国产中文字幕久久网| 韩日精品中文字幕| 最近2019中文字幕一页二页| 欧美在线视频免费| 成人动漫网站在线观看| 91色琪琪电影亚洲精品久久| 久久久久久国产精品| 久久九九国产精品怡红院| 欧美超级免费视 在线| 日韩欧美精品在线观看| 97视频在线观看播放| 亚洲国产精品悠悠久久琪琪| 这里只有精品在线观看| 亚洲日本欧美日韩高观看| 欧美专区在线视频| 国产欧美欧洲在线观看| 国产精品一区二区三区成人| 亚洲精品国产精品久久清纯直播| 一本一本久久a久久精品综合小说| 国产区亚洲区欧美区| 中文字幕视频在线免费欧美日韩综合在线看| 欧美中文字幕精品| 欧美激情一区二区三区在线视频观看| 91在线观看免费观看| 亚洲人成自拍网站| 亚洲国产精品视频在线观看| 亚洲人成网站在线播| 亚洲精选一区二区| 亚洲人成人99网站| 亚洲综合一区二区不卡| 91久久久久久久久久| 亚洲综合精品一区二区| 影音先锋欧美在线资源| 国产精品老女人视频| 精品国产一区二区三区在线观看| 亚洲激情小视频| 亚洲欧美一区二区三区在线| 国产精品7m视频| 国产一区二区激情| 欧美日韩国产精品一区二区三区四区| 日韩高清不卡av| 午夜精品福利视频| 国产99久久精品一区二区| 亚洲电影第1页| 亚洲电影第1页| 亚洲男人的天堂网站| 日韩一区二区精品视频| 欧美极品欧美精品欧美视频| 欧美裸体xxxx| 国产欧美日韩中文字幕| 日韩成人性视频| 欧美一区二区三区……| 亚洲日本成人女熟在线观看| 成人两性免费视频| 超在线视频97| 91精品国产乱码久久久久久久久| 992tv在线成人免费观看| 日韩av大片免费看| 欧美日韩亚洲一区二区| 国产精品亚洲网站| 欧美福利小视频| 亚洲天堂免费视频| 97成人精品视频在线观看| 一色桃子一区二区| 国产福利视频一区二区| 亚洲自拍偷拍在线| 97视频免费在线观看| 久久精品国产久精国产一老狼| 日韩经典中文字幕| 久久久久久中文| 91国产高清在线| 国产美女直播视频一区| 亚洲综合av影视| 国产精品第1页| 91久久久久久久久久久| 亚洲国产精品va在线看黑人动漫| 亚洲黄色av网站| 精品伊人久久97| 亚洲精品动漫久久久久| 亚洲综合一区二区不卡| 欧美日韩加勒比精品一区| 欧美一区深夜视频| 亚洲国模精品一区| 色av中文字幕一区| 国产精品国产三级国产专播精品人| 性欧美在线看片a免费观看| 国产精品久在线观看| 国产日韩精品在线播放| 国产一区二区免费| 国产精品爽爽ⅴa在线观看| 亚洲国内精品视频| 激情亚洲一区二区三区四区| 亚洲精品720p| 91亚洲精品视频| 成人在线视频网| 丰满岳妇乱一区二区三区| 欧美性开放视频| 国产综合视频在线观看| 国产精品麻豆va在线播放| 亚洲毛片在线观看.|