Builder模式

来源:互联网 发布:hmcl启动器找不到java 编辑:程序博客网 时间:2024/04/30 07:05

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

使用场景:

1、相同的方法,不同的执行顺序,产生不同的实践结果时。

2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。

3、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常适合。

4、当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值同时。

简单实现:

Computer.java

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 "Coputer [mBoard + "+mBoard+", mDisplay="+mDisplay+", mOS="+ mOS+"]";    }}

Builder.java

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

Macbook.java

public class Macbook extends Computer{    protected Macbook(){    }    @Override    public void setOS(){        mOS="Mac OS X 10.10";    }}

MacBuilder.java
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;    }}

Director.java

public class Director {    Builder mBuilder=null;    /**     * @param builder     */    public Director(Builder builder){        mBuilder=builder;    }    /**     * Build Object     */    public void construct(String board, String display){        mBuilder.buildBoard(board);        mBuilder.buildDisplay(display);        mBuilder.buildOS();    }}

Test.java

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

运行结果:


0 0
原创粉丝点击