建造者模式通常包含以下几个角色:
1. 产品(Product): 表示被构建的复杂对象。通常包含多个部分。
2. 抽象建造者(Builder): 声明了构建产品各个部分的抽象接口。
3. 具体建造者(Concrete Builder): 实现了抽象建造者接口,负责构建和装配产品的各个部分。
4. 指挥者(Director): 负责使用建造者接口构建产品。指挥者通常不知道具体的产品是如何被构建和组装的。
以下是一个简单的 Python 示例:
from abc import ABC, abstractmethod
# 产品
class Computer:
def __init__(self):
self.cpu = None
self.memory = None
self.storage = None
def __str__(self):
return f"Computer with CPU: {self.cpu}, Memory: {self.memory}, Storage: {self.storage}"
# 抽象建造者
class Builder(ABC):
@abstractmethod
def build_cpu(self):
pass
@abstractmethod
def build_memory(self):
pass
@abstractmethod
def build_storage(self):
pass
@abstractmethod
def get_computer(self):
pass
# 具体建造者
class ConcreteBuilder(Builder):
def __init__(self):
self.computer = Computer()
def build_cpu(self):
self.computer.cpu = "Intel i7"
def build_memory(self):
self.computer.memory = "16GB"
def build_storage(self):
self.computer.storage = "512GB SSD"
def get_computer(self):
return self.computer
# 指挥者
class Director:
def __init__(self, builder):
self.builder = builder
def construct(self):
self.builder.build_cpu()
self.builder.build_memory()
self.builder.build_storage()
# 客户端代码
builder = ConcreteBuilder()
director = Director(builder)
director.construct()
computer = builder.get_computer()
print(computer)
在这个示例中,Computer 是产品,Builder 是抽象建造者,ConcreteBuilder 是具体建造者,Director 是指挥者。Director 通过调用建造者的方法来构建产品。客户端代码可以选择不同的具体建造者来构建不同的产品。这样,通过指挥者的协调,可以构建具有不同部分的复杂对象。
转载请注明出处:http://www.zyzy.cn/article/detail/13940/设计模式