一、什么是建造者模式
- 使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象,将⼀个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 允许⽤户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节。
二、建造者的实现方式
模式结构分析:
Product(具体产品类):产品⻆⾊。
Builder(抽象建造类):抽象建造者,定义多个通⽤⽅法和构建⽅法。
ConcreteBuilder(具体建造类):具体建造者,可以有多个。
Director(指挥者类):指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象。
类关系图:
统一模型:
代码实现:
查看代码
/*
* 建造者中具体的产品信息
* */
@Data
public class Computer {
private String memory;
private String cpu;
private String mainboard;
private String disk;
private String power;
}
/*
* 抽象建造者
* */
public interface IComputerBuilder {
void buildCpu();
void buildMainboard();
void buildDisk();
void buildPower();
void buildMemory();
Computer createComputer();
}
/*
* 具体建造者
* */
public class HighComputerBuilder implements IComputerBuilder{
Computer computer;
public HighComputerBuilder(){
computer=new Computer();
}
@Override
public void buildCpu() {
computer.setCpu("这个是高配的CPU……");
}
@Override
public void buildMainboard() {
computer.setMainboard("这个是高配的主板……");
}
@Override
public void buildDisk() {
computer.setDisk("这个是高配的硬盘……");
}
@Override
public void buildPower() {
computer.setPower("这个是高配的电源……");
}
@Override
public void buildMemory() {
computer.setMemory("这个是高配的内存……");
}
@Override
public Computer createComputer() {
return computer;
}
}
/*
* 具体建造者
* */
public class LowerComputerBuilder implements IComputerBuilder{
Computer computer;
public LowerComputerBuilder(){
computer=new Computer();
}
@Override
public void buildCpu() {
computer.setCpu("这个是低配的CPU……");
}
@Override
public void buildMainboard() {
computer.setMainboard("这个是低配的主板……");
}
@Override
public void buildDisk() {
computer.setDisk("这个是低配的硬盘……");
}
@Override
public void buildPower() {
computer.setPower("这个是低配的电源……");
}
@Override
public void buildMemory() {
computer.setMemory("这个是低配的内存……");
}
@Override
public Computer createComputer() {
return computer;
}
}
/*
* 指挥者,控制整个组合过程,将需求交给建
造者,由建造者去创建对象
* */
public class ComputerDirector {
public Computer createCompany(IComputerBuilder builder){
builder.buildMemory();
builder.buildCpu();
builder.buildMainboard();
builder.buildDisk();
builder.buildPower();
return builder.createComputer();
}
}
测试用例:
/*
* 建造者模式的使用场景中的案例
* */
@Test
public void Builder(){
IComputerBuilder builder=new HighComputerBuilder();
ComputerDirector director=new ComputerDirector();
Computer computer=director.createCompany(builder);
System.out.println(computer.toString());
}
测试结果:
Computer(memory=这个是高配的内存……, cpu=这个是高配的CPU……, mainboard=这个是高配的主板……, disk=这个是高配的硬盘……, power=这个是高配的电源……)
方法评估:
优点:
-
- 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦。
- 每⼀个具体建造者都相对独⽴,⽽与其他的具体建造者⽆关,更加精细地控制产品的创建过程。
- 增加新的具体建造者⽆须修改原有类库的代码,符合开闭原则。
- 建造者模式结合链式编程来使⽤,代码上更加美观。
缺点:
-
- 建造者模式所创建的产品⼀般具有较多的共同点,如果产品差异⼤则不建议使⽤。
三、汇总
建造者模式与抽象⼯⼚模式的⽐较:
建造者模式返回⼀个组装好的完整产品 , 抽象⼯⼚模式返回⼀系列相关的产品,这些产品位于不同的产品等级结构,构成了⼀个产品族。
标签:java,Computer,void,建造,模式,computer,Override,设计模式,public From: https://www.cnblogs.com/q994321263/p/16931120.html