设计模式之建造者模式
温馨提示:
本文最后更新于 2023年11月16日,已超过 433 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
建造者模式
使用多个简单的对象一步步构建出一个复杂的对象。它属于创建型模式。
适用场景
复杂的对象,但组成该对象部件成分不变,但组合改变的情况
- 例如
- 计算机由CPU、主板、内存、硬盘、显卡、显示器、键盘和鼠标等等部件组成;
- 汽车由轮胎、车架、发动机、座椅、空调、方向盘等等部件组成;
- 一份快餐由两荤两素组成;
四要素
产品 Product
包含多个部件的复杂对象,即最终产品;如电脑、汽车、快餐;
抽象建造者 Builder
创建产品各部件的抽象方法接口,通常还包含返回最终产品的方法;
具体建造者 ConcreteBuilder
实现Build接口,实现具体创建工作;
指挥者 Director
负责调度合适的建造者,按特定顺序构建并组装产品。
实现
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;
}
}
public interface CarBuilder {
void makeEngine();
void makeTires();
void makeSeats();
Car getCar();
}
public class SedanBuilder implements CarBuilder {
private Car car;
public SedanBuilder() {
car = new Car();
}
@Override
public void makeEngine() {
car.setEngine("轿车发动机");
}
@Override
public void makeTires() {
car.setTires("轿车轮胎");
}
@Override
public void makeSeats() {
car.setSeats("轿车座椅");
}
@Override
public Car getCar() {
return car;
}
}
public class SUVBuilder implements CarBuilder {
private Car car;
public SUVBuilder() {
car = new Car();
}
@Override
public void makeEngine() {
car.setEngine("SUV发动机");
}
@Override
public void makeTires() {
car.setTires("SUV轮胎");
}
@Override
public void makeSeats() {
car.setSeats("SUV座椅");
}
@Override
public Car getCar() {
return car;
}
}
public class CarDirector {
private CarBuilder carBuilder;
public CarDirector(CarBuilder carBuilder) {
this.carBuilder = carBuilder;
}
public void constructCar() {
carBuilder.makeEngine();
carBuilder.makeTires();
carBuilder.makeSeats();
}
public Car getCar() {
return carBuilder.getCar();
}
}
public static void main(String[] args) {
CarBuilder sedanBuilder = new SedanBuilder();
CarDirector sedanDirector = new CarDirector(sedanBuilder);
sedanDirector.constructCar();
Car sedan = sedanDirector.getCar();
System.out.println("小轿车:" + sedan);
CarBuilder suvBuilder = new SUVBuilder();
CarDirector suvDirector = new CarDirector(suvBuilder);
suvDirector.constructCar();
Car suv = suvDirector.getCar();
System.out.println("SUV:" + suv);
}
优缺点
优点
扩展性好,建造者相互独立,互不影响,有利于系统解耦;
封装性好,很好的控制构建过程,对客户端隐藏具体构建细节;缺点
产品组成固定,适合于产品稳定成分不常变更的产品;
系统类和对象数量增加,如产品属性较少,可能会导致代码冗余;
正文到此结束
- 本文标签: 设计模式
- 本文链接: https://www.58cto.cn/article/15
- 版权声明: 本文由程序言原创发布, 非商业性可自由转载、引用,但需署名作者且注明文章出处:程序言 》 设计模式之建造者模式 - https://www.58cto.cn/article/15