面向对象-04建造者模式
建造者模式
- 内容:
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 角色:
- 抽象建造者(Builder)
- 具体建造者(Concrete Builder)
- 指挥者(Director)
- 产品( Product)
- 优点:
- 隐藏了一个产品的内部结构和装配过程
- 将构造代码与表示代码分开
- 可以对构造过程进行更精细的控制
建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。
'''
/**
# @charset "utf-8"
# @author Redskaber
# @Filename 4建造者模式.py
# @time 2022/3/28/22:24
**/
'''
from abc import ABCMeta, abstractmethod
# 角色对象属性
class Player:
def __init__(self, face=None, body=None, arm=None, log=None):
self.face = face
self.body = body
self.arm = arm
self.log = log
def __str__(self):
return '%s %s %s %s' % (self.face, self.body, self.arm, self.log)
# 建造者(对象标准)
# 抽象建造者(Builder)
class PlayerBuilder(metaclass=ABCMeta):
@abstractmethod
def face(self):
pass
@abstractmethod
def body(self):
pass
@abstractmethod
def arm(self):
pass
@abstractmethod
def log(self):
pass
# 具体建造者(具体对象)(Concrete Builder)
class SexyGirlBuilder(PlayerBuilder):
# 具体的建造者类返回是一个具体的对象
def __init__(self):
# 返回的objects
self.player = Player()
# 返回的这个对象的部分赋予
def face(self):
self.player.face = '漂亮的脸蛋'
def body(self):
self.player.body = '体态妖娆'
def arm(self):
self.player.arm = '纤细碧藕'
def log(self):
self.player.log = '纤细玉足'
# 具体建造者(具体对象)(Concrete Builder)
class MonsterBuilder(PlayerBuilder):
def __init__(self):
self.player = Player()
def face(self):
self.player.face = '牛头脸'
def body(self):
self.player.body = '万年海龟'
def arm(self):
self.player.arm = '树妖长枝'
def log(self):
self.player.log = '腾蛇尾'
# 指挥者(控制具体的实现类)(Director)
class Director:
# 控制具体类对象,组装顺序
def __init__(self, builder):
self.builder = builder
def director_builder(self):
self.builder.face()
self.builder.body()
self.builder.arm()
self.builder.log()
# 返回objects
return self.builder.player
# 产品( Product)
# 建造者类型
pb = SexyGirlBuilder()
# 添加控制对象
dire = Director(pb)
# 控制顺序,返回对象
b = dire.director_builder()
print(b)
# - 优点:
# - 隐藏了一个产品的内部结构和装配过程
# - 将构造代码与表示代码分开
# - 可以对构造过程进行更精细的控制
#
# 建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。

浙公网安备 33010602011771号