建造者模式
又叫生成器模式,它可以将复杂对象的建造过程抽象出来,然后把这个抽象过程个性化的任务交给子类。用户只需要指定个性化类型即可,不需要内部的具体构建细节。
它有四个roles :
(1)Client (用户)
(2)Builder (抽象建造者)
(3)ConcreteBuilder (具体建造者)
(4)Director (指挥者)构建一个使用Builder接口的对象,隔离了客户与对象的生产过程,负责控制产品对象的生产过程。
Builder模式的UML:
举个栗子:
有家面馆有两个厨师,一个负责炒面,一个负责蒸面,实现顾客点餐的功能。
此时,服务员帮顾客点餐就是Director,两个负责具体功能的厨师就是ConcreteBuilder,共同继承Builder接口或抽象类,而顾客就是我们测试时的Main类。
代码实现:
public abstract class NoodleBuilder {
public abstract void buildPart1();
public abstract void buildPart2();
}
//具体的构建者
public class FriedNoodleBuilder extends NoodleBuilder{
@Override
public void buildPart1() {
System.out.println("准备牛肉,面");
}
@Override
public void buildPart2() {
System.out.println("炒面");
}
}
public class SteamedNoodleBuilder extends NoodleBuilder{
@Override
public void buildPart1() {
System.out.println("准备猪肉,面");
}
@Override
public void buildPart2() {
System.out.println("蒸面");
}
}
public class Director {
private NoodleBuilder builder;
Director(NoodleBuilder builder){
this.builder = builder;
}
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
}
public class Main {
public static void main(String[] args) {
//比如顾客现在想要牛肉炒面
//我们找到服务员director,director就去找了炒面厨师FriedNoodleBuilder
Director director = new Director(new FriedNoodleBuilder());
//然后开始构建炒面
director.construct();
}
}总结
代码中Director类是不知道Builder的具体实现子类的,一切按照客户的需求来。正是不知道才能够替换,正是因为能够替换,组件才具有高价值。

京公网安备 11010502036488号