本文导航图
建造者模式(Builder Pattern)当一个类的内部数据非常复杂时,比如说创建对象时需要读取各种配置文件,同时持有比较多的数据,创建这个类的对象时需要开发花费较大的学习成本去研究类的内部结构,这时候建造者模式就应运而生。
包含的角色将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在建造者模式中有四个角色。
■ 抽象建造者(Builder)角色:该角色用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
■ 具体建造者(Concrete Builder)角色:该角色实现抽象建造者中定义的所有方法,并且返回一个组建好的产品实例。
■ 产品(Product)角色:该角色是建造中的复杂对象,一个系统中会有多于一个的产品类,这些产品类并不一定有共同的接口,完全可以是不相关联的。
■ 导演者(Director)角色:该角色负责安排已有模块的顺序,然后告诉Builder 开始建造。
举个栗子
例子:造汽车 & 买汽车。
工厂(建造者模式):负责制造汽车(组装过>程和细节在工厂内)
汽车购买者(用户):你只需要说出你需要的>型号(对象的类型和内容),然后直接购买就可>>以使用了 (不需要知道汽车是怎么组装的(车轮、车门、>发动机、方向盘等等))
我们用代码实验来模拟一下上面的过程
// 具体产品:汽车
public class Car {
private String color;
private String brand;
// getter setter 方法省略
}
// 抽象建造者Builder
public abstract class Builder {
abstract void buildColor();
abstract void buildBrand();
abstract Car createCar();
}
// 具体建造者,BWM建造者
public class BMWBuilder extends Builder {
private Car car = new Car();
@Override
void buildColor() {
car.setColor("白色");
}
@Override
void buildBrand() {
car.setBrand("X1");
}
@Override
Car createCar() {
return car;
}
}
// 指挥者:模拟4S店
public class Director {
private Builder builder = null;
public Director(Builder builder) {
this.builder = builder;
}
public Car build() {
builder.buildColor();
builder.buildBrand();
return builder.createCar();
}
}
// mainClass模拟消费者买车行为
public class MainClass {
public static void main(String[] args) {
// 消费者找到4S店(指挥者)购买一辆白色的宝马X1
Director director = new Director(new BMWBuilder());
Car car = director.build();
System.out.println(car);
}
}
建造者模式解决的问题
先看一下建造者模式的优缺点:
优点:
缺点:
使用建造者模式的典型场景如下。
建造者模式我们就聊到这,关于建造者模式的其他问题也欢迎私信与我交流,下期我们聊原型模式。
我是Seven,一个不懈努力的程序猿,希望本文能对你有所裨益
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved