该篇主要说的是建造者模式。
定义
建造者模式也叫作生成器模式。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色
1.产品类
需要生成的类,代码如下:
public class Computer {
private List<String> part = new ArrayList<>();
public void add(String str){
part.add(str);
}
public void doSomething(){
System.out.println("产品内部独立的业务逻辑");
part.forEach(s->{
System.out.println(s);
});
}
}
2.建造者
抽象建造者:
public abstract class Builder {
// 设置产品的不同部分,获得不同的产品
public abstract void setPart();
// 建造产品
public abstract Computer bulidProduct();
}
建造者实例:
public class ComputerBuilder extends Builder{
private Computer computer = null;
public ComputerBuilder() {
this.computer = new Computer();
}
@Override
public void setPart() {
/**
* 产品类的内部逻辑
*/
computer.add("cpu");
computer.add("主板");
computer.add("硬盘");
computer.add("组装");
}
@Override
public Computer bulidProduct() {
return computer;
}
}
3.导演类
public class Director {
private ComputerBuilder computerBuilder = new ComputerBuilder();
public Computer getComputer(){
/**
* 设置不同的零件,产生不同的产品
*/
System.out.println("想要组装电脑");
computerBuilder.setPart();
return computerBuilder.bulidProduct();
}
}
运行代码及结果
运行代码
public static void main(String[] args) {
Director director = new Director();
Computer computer = director.getComputer();
computer.doSomething();
}
结果:
想要组装电脑
产品内部独立的业务逻辑
cpu
主板
硬盘
组装
建造者模式优缺点
优点:
- 易于解耦
将产品本身与产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品。也就说细节依赖抽象。 - 易于精确控制对象的创建
将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰 - 易于拓展
增加新的具体建造者无需修改原有类库的代码,易于拓展,符合“开闭原则“。
每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
缺点
- 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
- 果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
注意:建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗地说就是零件的装配,顺序不同产生的对象也不同。