建造者模式

浏览 592

课文

### 建造者模式(Builder Pattern) **情景** 李华是一位赛百味员工,每天负责准备好三明治的原料,并按需要提供给顾客: ```python # 定义一个三明治类,并准备材料: class Sandwich: def __init__(self): # 先准备面包,再夹肉,最后挤上酱料 self.build_bread() self.build_meat() self.build_sauce() self.show_sandwich() # 定义好上面所用的四个方法,其中前三个方法如果子类不改写就会报错 def build_bread(self): raise NotImplementedError("没有准备面包") def build_meat(self): raise NotImplementedError("没有夹肉") def build_sauce(self): raise NotImplementedError("没有挤上酱料") def show_sandwich(self): print("面包:" + self.bread) print("肉:" + self.meat) print("酱料:" + self.sauce) # 菜单中有健身三明治以及香香三明治,他们都继承了三明治类 class Fitness(Sandwich): def build_bread(self): self.bread = "全麦面包" def build_meat(self): self.meat = "鸡胸肉" def build_sauce(self): self.sauce = "黑椒酱" class Spicy(Sandwich): def build_bread(self): self.bread = "白面包" def build_meat(self): self.meat = "炸猪排" def build_sauce(self): self.sauce = "千岛酱" ``` 这时候,小肥点了一个香香三明治: ```python xiaofei_sandwich = Spicy() ``` 输出: ```output 面包:白面包 肉:炸猪排 酱料:千岛酱 ``` 这就是建造者模式。 **正文** 或许有同学看到这里会一脸疑问:建造者模式这么简单的吗? 没错,在 python 里实现它就是这么简单,在类初始化时按步骤调用自身的方法就可以了。 我们来看看建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。继续套用上面的例子:三明治作为一个「复杂对象」,由面包、肉与酱料构成,这三种东西根据其种类的不同,排列组合能创建出非常多种三明治,即「不同的表示」;而「准备面包 → 夹肉 → 挤酱料」则是「同样的构建过程」,使得我们只要根据这个创建过程就能够稳定创造出三明治对象。 有时在一些非常复杂的逻辑的情况下,甚至需要将初始化函数的逻辑单独提出来放在另一个函数中: ```python class Sandwich: def show_sandwich(self): print("面包:" + self.bread) print("肉:" + self.meat) print("酱料:" + self.sauce) # 此时父类与子类都没有有用的构造函数 class ComplexSandwich: def build_bread(self): self.bread = "复杂面包" def build_meat(self): self.meat = "复杂肉排" def build_sauce(self): self.sauce = "复杂酱" def complex_build(sandwich, **args, **kwargs):,: s = sandwich() # 创建过程中可以穿插非常多的逻辑 s.build_bread() s.build_meat() s.build_sauce() return s ``` 当然多数情况下这种写法没有必要,此处仅供参考。

实战

1.设计一个电脑类,并按照「主机 → 显示器 → 键盘 → 鼠标」的步骤创建它,并在最后打印「组装完成」。

解析

1.设计一个电脑类,并按照「主机 → 显示器 → 键盘 → 鼠标」的步骤创建它,并在最后打印「组装完成」。 ```python class Computer: def __init__(self): self.add_mainframe() self.add_monitor() self.add_keyboard() self.add_mouse() print("组装完成") class MyComputer(Computer): def add_mainframe(self): self.mainframe = "主机" def add_monitor(self): self.monitor = "显示器" def add_keyboard(self): self.keyboard = "键盘" def add_mouse(self): self.mouse = "鼠标" mypc = MyComputer() ``` 输出: ```output 组装完成 ```
点击查看

评论

登录参与讨论

暂无评论

共 0 条
  • 1
前往
  • 1