建造者模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了对象内部的构建细节。建造者模式将对象的构建过程与对象的表示分离,使得相同的构建过程可以创建不同的表示。
假设我们要构建一个汽车对象,汽车包含多个部件,如发动机、轮胎、座椅等。我们将使用建造者模式来实现这个需求。
public class Car {
private String engine;
private String tires;
private String seats;
public void setEngine(String engine) {
this.engine = engine;
}
public void setTires(String tires) {
this.tires = tires;
}
public void setSeats(String seats) {
this.seats = seats;
}
@Override
public String toString() {
return "Car{" +
"engine='" + engine + '\'' +
", tires='" + tires + '\'' +
", seats='" + seats + '\'' +
'}';
}
}
public abstract class CarBuilder {
protected Car car;
public Car getCar() {
return car;
}
public abstract void buildEngine();
public abstract void buildTires();
public abstract void buildSeats();
}
public class ConcreteCarBuilder extends CarBuilder {
public ConcreteCarBuilder() {
car = new Car();
}
@Override
public void buildEngine() {
car.setEngine("V8 Engine");
}
@Override
public void buildTires() {
car.setTires("High-performance Tires");
}
@Override
public void buildSeats() {
car.setSeats("Leather Seats");
}
}
public class CarDirector {
private CarBuilder carBuilder;
public CarDirector(CarBuilder carBuilder) {
this.carBuilder = carBuilder;
}
public Car constructCar() {
carBuilder.buildEngine();
carBuilder.buildTires();
carBuilder.buildSeats();
return carBuilder.getCar();
}
}
public class Main {
public static void main(String[] args) {
CarBuilder carBuilder = new ConcreteCarBuilder();
CarDirector carDirector = new CarDirector(carBuilder);
Car car = carDirector.constructCar();
System.out.println(car);
}
}
运行客户端代码,输出结果如下:
Car{engine='V8 Engine', tires='High-performance Tires', seats='Leather Seats'}
建造者模式适用于以下场景:
通过建造者模式,可以清晰地分离对象的构建过程和表示,使得代码更加模块化、易于维护和扩展。
建造者模式(Builder Pattern)是一种创建型设计模式,它允许你将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于创建复杂对象,这些对象的构建过程涉及多个步骤或组件。
下面是建造者模式的一个简单示例结构(Python 伪代码):
# 产品类
class Product:
def __init__(self):
self.parts = []
def add_part(self, part):
self.parts.append(part)
def show(self):
print("产品组成部分:")
for part in self.parts:
print(f"- {part}")
# 抽象建造者
class Builder:
def build_part_a(self):
pass
def build_part_b(self):
pass
def get_result(self):
pass
# 具体建造者
class ConcreteBuilder1(Builder):
def __init__(self):
self.product = Product()
def build_part_a(self):
self.product.add_part("部件A1")
def build_part_b(self):
self.product.add_part("部件B1")
def get_result(self):
return self.product
# 指挥者
class Director:
def __init__(self, builder):
self.builder = builder
def construct(self):
self.builder.build_part_a()
self.builder.build_part_b()
return self.builder.get_result()
# 使用示例
builder = ConcreteBuilder1()
director = Director(builder)
product = director.construct()
product.show()