Builder模式

2017-05-07  本文已影响4人  冉桓彬

1、Builder模式介绍:

Builder模式是一步一步创建一个复杂对象的创建型模式, 它允许用户在不知道内部构建细节的情况下, 可以更精细地控制对象的构造流程. 该模式是为了将构建复杂对象的过程和它的部件解耦, 使得构建过程和部件的表示隔离开来;

2、Builder模式的定义:

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

3、Builder模式的使用场景:

4、缺点:

5、代码示例:

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) {
        mBoard = mDisplay;
    }

    public abstract void setOS();

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

public class Macbook extends Computer {

    protected Macbook(){}

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

public abstract class Builder {
    public abstract void buildBoard(String board);
    public abstract void buildDisplay(String display);
    public abstract void buildOS();
    public abstract Computer create();
}

public class MacbookBuilder extends Builder {

    private Computer mComputer = new Macbook();

    @Override
    public void buildDisplay (String board) {
        mComputer.setBoard(board);
    }

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

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

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

public class Director {

    Builder mBuilder = null;

    public Director(Builder builder) {
        mBuilder = builder;
    }

    public void construct(String board, Stirng display){
        mBuilder.buildBoard(board);
        mBuilder.buildDisplay(display);
        mBuilder.buildOS();
    }
}
public class Test {
    public static void main(String[] args) {
        Builder builder = new MacbookBuilder();
        Director director = new Director(builder);
        director.construct("英特尔主板", "Dell显示器");
        Systen.out.println("Computer Info:" + builder.create().toString());
    }
}
上一篇 下一篇

猜你喜欢

热点阅读