建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于建立型模式,它提供了一种建立对象的最佳方式。将一个复杂的构建与其表示相分离,使得一样的构建过程能够建立不一样的表示。设计模式
建造者模式有四个角色:bash
Product(产品类)
:要建造的对象builder(抽象建造者)
:规范建造对象的组成成分,但不具体建立。ConcreteBuilder(具体建造者)
:根据抽象建造者规范的组成成分来具体建立,并返回建造对象(产品类)实例。Director(指导者)
:调用具体建造者来建造各个部分,指导者只须要关注建造顺序,而不须要关注各成分(产品类属性)具体信息。执行顺序: Director->builder->ConcreteBuilder
最后返回Product
ide
要建造的对象学习
public class Phone {
/**
* 处理器
*/
private String cpu;
/**
* 屏幕
*/
private String screen;
/**
* 相机
*/
private String camera;
getter and setter...
复制代码
规范建造对象的组成成分,但不具体建立。测试
public interface PhoneBuilder {
void buildScreen();
void buildCpu();
void buildCamera();
Phone buildPhone();
}
复制代码
根据抽象建造者规范的组成成分来具体建立,并返回建造对象(产品类)实例。ui
public class ConcreteBuilder implements PhoneBuilder{
public Phone phone;
public ConcreteBuilder() {
phone = new Phone();
}
@Override
public void buildScreen() {
phone.setScreen("三星OLED屏幕");
}
@Override
public void buildCpu() {
phone.setCpu("骁龙845");
}
@Override
public void buildCamera() {
phone.setCamera("SONY");
}
@Override
public Phone buildPhone() {
return this.phone;
}
}
复制代码
调用具体建造者来建造各个部分,指导者只须要关注建造顺序,而不须要关注各成分(产品类属性)具体信息。this
public class Direct {
public Phone constructMi8(PhoneBuilder phoneBuilder){
phoneBuilder.buildCamera();
phoneBuilder.buildCpu();
phoneBuilder.buildScreen();
return phoneBuilder.buildPhone();
}
}
复制代码
public class Main {
public static void main(String[] args) {
Direct direct = new Direct();
Phone phone = direct.constructMi8(new ConcreteBuilder());
System.out.println(phone);
}
}
复制代码
Phone{cpu='骁龙845', screen='三星OLED屏幕', camera='SONY'}
复制代码
建造者模式和抽象工厂模式是很像的(都是建立产品类实例),建造者模式比它多了一个指导者的角色,因此它们的最大区别在于:spa
建造者模式只须要关注产品类建造的顺序,而不须要关注其具体信息。设计
而抽象工厂模式须要关注其具体信息去建立产品类。code
抽象工厂模式顺风车:设计模式快速学习(二)抽象工厂模式