建造者模式-------python

''' 2、BUILDER——建造模式?

  MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 

  建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色:


抽象建造者(Builder)
具体建造者(Concrete Builder)
指挥者(Director)
产品(Product)
建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。


适用场景:


当创建复杂对象的算法(Director)应该独立于该对象的组成部分以及它们的装配方式(Builder)时
当构造过程允许被构造的对象有不同的表示时(不同Builder)。
优点:


隐藏了一个产品的内部结构和装配过程
将构造代码与表示代码分开
可以对构造过程进行更精细的控制


'''
#==========================2==========================
# from abc import abstractmethod,ABCMeta
#
# class Player(object):
#     def __init__(self,face=None,body=None,arm=None,leg=None):
#         self.face=face
#         self.body=body
#         self.arm=arm
#         self.leg=leg
#
#     def __str__(self):
#         return "%s,%s,%s,%s" %(self.face,self.arm,self.body,self.leg)
#
# class PlayerBuilder(metaclass=ABCMeta):
#     @abstractmethod
#     def build_face(self):
#         pass
#     @abstractmethod
#     def build_body(self):
#         pass
#     @abstractmethod
#     def build_arm(self):
#         pass
#     @abstractmethod
#     def build_leg(self):
#         pass
#     @abstractmethod
#     def get_player(self):
#         pass
#
# class BeautifulWomanBuilder(PlayerBuilder):
#     def __init__(self):
#         self.player=Player()
#     def build_face(self):
#         self.player.face="漂亮脸蛋"
#     def build_arm(self):
#         self.player.arm="细胳膊"
#     def build_body(self):
#         self.player.body="西药"
#     def build_leg(self):
#         self.player.leg="长腿"
#     def get_player(self):
#         return self.player
#
# class PlayerDirector(object):
#     def build_player(self,builder):
#         builder.build_body()
#         builder.build_arm()
#         builder.build_leg()
#         builder.build_face()
#         return builder.get_player()
#
# dirctor=PlayerDirector()
# builder=BeautifulWomanBuilder()
# p=dirctor.build_player(builder)
# print(p)


#===========================2==========================
from abc import ABCMeta,abstractmethod
class Compution(object):
    def __init__(self,cpu=None,iternal_storage=None):
        self.cpu=cpu
        self.iternal_storage=iternal_storage


    def __str__(self):
        return "I am is compution,I have %s and %s" % (self.cpu,self.iternal_storage)


class BluePrint(metaclass=ABCMeta):
    @abstractmethod
    def design_cpu(self):
        pass
    @abstractmethod
    def design_storage(self):
        pass
    @abstractmethod
    def get_compution(self):
        pass


class Worker(BluePrint):
    def __init__(self,name="默默无闻"):
        self.name=name
        self.comp=Compution()
    def design_cpu(self):
        self.comp.cpu="K610-i5"
    def design_storage(self):
        self.comp.iternal_storage="8G"
    def get_compution(self):
        return self.comp


class Direator(object):
    def dir_work(self,worker):
        worker.design_cpu()
        worker.design_storage()
        return worker.get_compution()


d=Direator()
w=Worker()
com=d.dir_work(w)
print(com)

猜你喜欢

转载自blog.csdn.net/weixin_42040854/article/details/80612620