创建型模式之建造者模式
建造者模式分为两个部分,构造和装配,是产品本身与产品创建过程的解耦。
建造者模式中有四种角色,分别是:
-
抽象建造者类(Buider):规定哪些部件要实现,而不涉及具体实现。
-
具体建造者类(ConcreteBuilder):实现Buider接口,完成复杂产品的各个部件的具体创建方法,在构造过程完成后,提供产品实例。
-
产品类(Product):要创建的复杂对象
-
指挥者类(Director):调用具体建造者创建复杂对象各个部分,在指挥者类中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
具体建造者类负责构造部件,而指挥者类负责进行装配,生产出产品类。
扩展:
一般的类如果参数过多,通过有参方法或者get方法对参数进行赋值很麻烦,并且很容易就混淆参数的顺序,可以通过一种另类的建造者模式进行创建。
采用内部类对方法的参数进行访问与赋值,内部类中进行对属性的装配。
/**
* 手机类
*/
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
// 私有构造方法
private Phone(Buider buider){
this.cpu = buider.cpu;
this.screen = buider.screen;
this.memory = buider.memory;
this.mainboard = buider.mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
", mainboard='" + mainboard + '\'' +
'}';
}
public static final class Buider{
private String cpu;
private String screen;
private String memory;
private String mainboard;
public Buider cpu(String cpu){
this.cpu = cpu;
return this;
}
public Buider screen(String screen){
this.screen = screen;
return this;
}
public Buider memory(String memory){
this.memory = memory;
return this;
}
public Buider mainboard(String mainboard){
this.mainboard = mainboard;
return this;
}
// 使用构建者Phone对象
public Phone buider(){
return new Phone(this);
}
}
}
然后就可以采用链式方法进行创建:
// 创建手机对象 通过构建者对象获取手机对象
Phone phone = new Phone.Buider()
.cpu("intel")
.screen("三星")
.memory("Kingston")
.mainboard("华硕")
.buider();
System.out.println(phone.toString());