''' 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)