Builder模式

自由拓展你的程序-建造者模式(Builder模式)

一个复杂对象的构建与它的表示分离。使得同样的构建过程可以创建不同的表示。

使用场景

  1. 相同的方法,不同的执行顺序,产生不同的结果时。
  2. 多个零件或者部件,都可以装配到一个对象中,但是产生的运行结果又不想同时。
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式就非常合适。
  4. 当初始化一个对象特别复杂,例如参数多,且很多参数都有默认值时

简单实现

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
//抽象类
package Builder;

public abstract class Computer {
    protected String mBoard;
    protected String mDisplay;
    protected String mOS;

    protected Computer() {
    }
    public void setBoard(String board){
        mBoard=board;
    }
    //设置内存
    public void setDisplay(String display){
        mDisplay=display;
    }
    //设置操作系统
    public abstract void setOS();

    @Override
    public String toString() {
        return "Computer{" +
                "mBoard='" + mBoard + '\'' +
                ", mDisplay='" + mDisplay + '\'' +
                ", mOS='" + mOS + '\'' +
                '}';
    }
}

//Builder类
package Builder;

public abstract class Builder {
    //设置主机
    public abstract void buildBoard(String board);
    //设置显示器
    public abstract void buildDisplay(String display);
    //设置操作系统
    public abstract void buildOS();
    //创建computer
    public abstract Computer create();

}


package Builder;

public class Director {
    Builder mBuilder=null;
    public Director(Builder builder){
        mBuilder=builder;
    }
    public void construct(String board,String display){
        mBuilder.buildBoard(board);
        mBuilder.buildDisplay(display);
        mBuilder.buildOS();
    }
}


package Builder;

public class Macbook extends Computer {
    public Macbook() {
    }

    @Override
    public void setOS() {
        mOS="MAC OS X 10.10";
    }
}


package Builder;

public class MacbookBuilder extends Builder {
    private Computer mComputer=new Macbook();
    @Override
    public void buildBoard(String board) {
        mComputer.setBoard(board);
    }

    @Override
    public void buildDisplay(String display) {
        mComputer.setDisplay(display);
    }

    @Override
    public void buildOS() {
        mComputer.setOS();
    }

    @Override
    public Computer create() {
        return mComputer;
    }
}

//测试类
package Builder;

public class Test {
    public static void main(String[] args) {
        Builder builder=new MacbookBuilder();
        Director pcDirector=new Director(builder);
        pcDirector.construct("因特尔主板","测试显示器");
        System.out.println("computer info :"+builder.create().toString());
    }
}

执行结果:

show.png