建造者模式
(Builder Pattern),也被称为生成器模式
,是一种创建型设计模式
,主要用于解决复杂对象的构建
问题。建造者模式的主要特点是:
1.分离构建与表示:
将一个复杂对象的构建与它的表示分离
,使得同样的构建过程
可以创建不同的表示
。
2.封装性:
通过将对象
的构建过程封装
在一个独立的建造者类
中,提高了代码的封装性。
3.扩展性:
不同的具体建造者可以实现不同的构建步骤,从而创建不同的产品变体,提高了系统的扩展性。
4.控制细节风险:
客户端不必知道
产品内部
组成的细节
,便于控制细节风险。
建造者模式的主要构成要素包括:
1.抽象建造者
(Builder):定义
了构建产品
的步骤和方法
,但没有具体
的实现。
2.具体建造者
(Concrete Builder):实现
了抽象建造者定义的方法,完成
了产品的构建过程
,每个具体建造者负责构建特定的产品变体。
3.指挥者
(Director):负责控制建造
的过程
,它通过将客户端
与具体建造者分离
,确保
产品的构建
是按照一定顺序和规则进行
的。
4.产品
(Product):表示正在构建的复杂对象
,建造者模式的目标是构建这个产品。
示例:定义了一个Computer产品类,一个Builder接口,以及一个具体的LaptopBuilder类实现Builder接口。Director类负责安排构建过程。客户端代码中,我们创建了Director、Builder和Computer的实例,并通过Director来构建一台电脑。最后打印出了电脑的配置信息。
java
// 产品类
public class Computer {
private String cpu;
private String sam;
private String screen;
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setSam(String sam) {
this.sam = sam;
}
public void setScreen(String screen) {
this.screen = screen;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", sam='" + sam + '\'' +
", screen='" + screen + '\'' +
'}';
}
}
// 建造者接口
public interface Builder {
void buildCpu();
void buildRam();
void buildScreen();
Computer getComputer();
}
// 具体建造者
public class LaptopBuilder implements Builder {
private Computer computer=new Computer();
@Override
public void buildCpu() {
computer.setCpu("i7处理器");
}
@Override
public void buildRam() {
computer.setSam("16GB内存");
}
@Override
public void buildScreen() {
computer.setScreen("32寸屏幕");
}
@Override
public Computer getComputer() {
return computer;
}
}
//指挥者
public class Director {
public void construct(Builder builder){
builder.buildCpu();
builder.buildRam();
builder.buildScreen();
}
}
//测试
public class BuilderPatternExample {
public static void main(String[] args) {
//指挥者
Director director = new Director();
//建造者
Builder builder = new LaptopBuilder();
//指挥
director.construct(builder);
//建造
Computer computer = builder.getComputer();
System.out.println(computer);
}
}