设计模式--Builder

来源:互联网 发布:淘宝买摩托车可靠吗 编辑:程序博客网 时间:2024/05/06 08:34

1. 名称 (与开发人员共享的词汇)

    创建者模式(Builder)

2.分类 (模式可以 归为的类目)

    创建性模式

3.意图 (简短的描述该模式的作用)

    允许用户在不知道对象内部结构的情况下,可以惊喜的控制对象的构造流程,将复杂对象的构建过程和它的部件解耦,使构建过程和部件的表示隔离开

4.动机 (给出问题以及解决问题的具体场景)

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

5.适用性 (描述模式可以被应用在什么场合)

    1. 相同的方法,不同的执行顺序,产生不同的事件结果时

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

    3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用

    4. 初始化一个对象时特别复杂,参数繁多并且很多参数有默认值时

6.结构 (提供此模式的类结构图,显示类之间的关系)

   

7.参与者 (描述此设计中涉及的类和对象在模式中的责任和角色)

     Product:  产品的抽象类

     Builder:   抽象Builder类,规范产品的组建,一般由子类实现具体的组建过程

    ConcreteBuilder:  具体的Builder类,实现具体的组建过程

    Director:    统一组装过程

8.协作 (参与者如何在模式中合作)

 Computer类定义了产品需要的部件接口

 Macbook类提供了产品的部件

 Builder类提供产品组装接口

 MacbookBuilder类实现了产品组装的接口

 Director类规定了组装步骤

 通过以上的封装,我们创建一个对象时并不需要知道对象的组成,只要通过Director的construct方法就可以构造出一个想要的对象。

9.范例代码 (提供实现模式的代码片段)

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();
    public void buildBoard(String board) {
        mComputer.setBoard(board);
    }
    public void buildDisplay(String display) {
        mComputer.setDisplay(display);
    }
    public void buildOs() {
        mComputer.setOs();
    }
    public Computer create() {
        return mComputer;
    }
}

public abstract class Computer {
    private String mBoard;
    private 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();
}

public class Macbook extends Computer {
    protected Macbook() {}
    public void setOs() {
        mOs = "Mac Os";
    }
}

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();
    }
}

10.实现 (在实现该模式时使用的技巧以及需要注意的问题)

 在相关开发中,Director角色经常被省略,而直接使用一个Builder来进行对象的组装,这个builder通常为链式调用,关键点是每个方法都返回this,可以实现

这种形式不仅去除了Director角色,整个结构也更加简单,也能对Product对象的组装过程有更精细的控制。

11.相关模式 (此模式与其他模式之间的关系)
0 0
原创粉丝点击