建造者设计模式是一种创建型设计模式,它将一个复杂对象的构建过程和它的表示分离开来,从而使得同样的构建过程可以创建不同的表示形式。在这种模式中,我们使用一个指挥者对象(Director)来协调建造者对象(Builder)的构建过程,并通过建造者对象构建产品对象(Product)。
一、应用场景
建造者模式通常适用于以下场景:
当需要创建的对象具有复杂的内部结构,且需要将其创建过程和表示分离时。
当需要创建不同的对象表示时,使用相同的构建过程。
当需要避免构造函数参数列表过长时,使用建造者模式可以将参数分步传递,从而避免过长的构造函数参数列表。
二、实现方法
建造者设计模式包含以下几个角色:
Director:指挥者,负责指导建造者如何构建产品。
Builder:建造者,负责定义构建产品的接口和实现。
ConcreteBuilder:具体建造者,实现建造者接口并定义构建产品的具体实现。
Product:产品,包含被构建出来的对象。
示例
下面是一个简单的示例,展示了如何使用建造者设计模式来构建汽车和汽车部件。
假设我们要建造一辆汽车,它包括了若干个部件,比如发动机、轮胎、座椅等。我们可以使用建造者模式来创建汽车和汽车部件。
首先,我们定义汽车部件的接口:
public interface CarPart {
public String getName();
}
然后,我们定义不同类型的汽车部件,比如:
public class Engine implements CarPart {
public String getName() {
return “Engine”;
}
}
public class Wheel implements CarPart {
public String getName() {
return “Wheel”;
}
}
public class Seat implements CarPart {
public String getName() {
return “Seat”;
}
}
接下来,我们定义汽车类:
public class Car {
private List parts = new ArrayList();
public void addPart(CarPart part) {
parts.add(part);
}
public void show() {
System.out.println("Parts of car:");
for (CarPart part : parts) {
System.out.println(part.getName());
}
}
}
最后,我们定义汽车建造者类:
public class CarBuilder {
private Car car = new Car();
public void buildEngine() {
car.addPart(new Engine());
}
public void buildWheel() {
car.addPart(new Wheel());
}
public void buildSeat() {
car.addPart(new Seat());
}
public Car getResult() {
return car;
}
}
在上面的示例中,我们使用汽车部件接口定义了不同类型的汽车部件。然后,我们定义了汽车类,它包含了若干个汽车部件。最后,我们定义了汽车建造者类,它实现了汽车的构建过程,包括添加不同类型的汽车部件。通过使用汽车建造者类,我们可以创建不同类型的汽车。
下面是一个示例,展示如何使用汽车建造者类来创建一辆汽车:
public class BuilderPatternExample {
public static void main(String[] args) {
CarBuilder builder = new CarBuilder();
// 添加发动机和轮胎
builder.buildEngine();
builder.buildWheel();
// 创建汽车
Car car = builder.getResult();
// 显示汽车部件
car.show();
}
}
运行上面的示例,输出如下:
Parts of car:
Engine
Wheel
在上面的示例中,我们首先创建了一个汽车建造者对象。然后,我们使用建造者对象添加了一个发动机和一个轮胎。最后,我们通过建造者对象创建了一辆汽车,并显示了汽车部件。
三、优缺点
优点:
建造者模式将复杂对象的构建过程和它的表示分离开来,使得同样的构建过程可以创建不同的表示形式,从而增加了代码的复用性和灵活性。
建造者模式可以避免构造函数参数列表过长的问题,通过建造者对象可以分步传递参数。
建造者模式可以隐藏对象的构建细节,使得客户端代码只需要与建造者和产品对象打交道,而不需要关心内部的构建细节。
缺点:
建造者模式增加了代码的复杂性,需要定义多个类和接口。
建造者模式创建的对象可能存在一定的相似性,因此可能需要对建造者模式进行进一步抽象。
四、 总结
建造者模式是一种创建型设计模式,它将一个复杂对象的构建过程和它的表示分离开来,从而使得同样的构建过程可以创建不同的表示形式。
使用建造者模式可以避免构造函数参数列表过长的问题,并可以隐藏对象的构建细节,使得客户端代码只需要与建造者和产品对象打交道,而不需要关心内部的构建细节。但是,建造者模式增加了代码的复杂性,需要定义多个类和接口。
·END·
如喜欢本文,请点击右上角,把文章分享到朋友圈
若想第一时间获取精彩,请点“在看”并加“星标”
往期回顾
设计模式之单例模式
设计模式之工厂设计模式
数据集成场景优化——任务编排/限流
使用队列解耦的架构方案
基于ES+Redis+MySQL高可用架构设计
万字图文讲透数据库缓存一致性问题
声明:来自老汉聊技术,仅代表创作者观点。链接:https://eyangzhen.com/7908.html