前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Builder模式

Builder模式

作者头像
提莫队长
发布2019-02-21 13:40:27
7500
发布2019-02-21 13:40:27
举报
文章被收录于专栏:刘晓杰刘晓杰

1.定义

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

2.使用场景

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

3.简单实现

定义一个要建造对象的抽象类和实现类

代码语言:javascript
复制
//抽象类
public abstract class Computer {
    protected String mOS;
    protected String mBoard;
    protected String mDisplay;

    public void setBoard(String mBoard) {
        this.mBoard = mBoard;
    }
    public void setDisplay(String mDisplay) {
        this.mDisplay = mDisplay;
    }

    public abstract void setOS();

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

//实现类
public class MacComputer extends Computer {
    @Override
    public void setOS() {
        mOS = "Mac";
    }
}

再定义一个抽象的builder类和builder实现类

代码语言:javascript
复制
public abstract class Builder {
    public abstract Builder setBoard(String mBoard);

    public abstract Builder setDisplay(String mDisplay);

    public abstract Builder setOS();

    public abstract Computer create();
}

public class MacBookBuilder extends Builder {

    private Computer mComputer = new MacComputer();

    @Override
    public Builder setBoard(String mBoard) {
        mComputer.setBoard(mBoard);
        return this;
    }

    @Override
    public Builder setDisplay(String mDisplay) {
        mComputer.setDisplay(mDisplay);
        return this;
    }

    @Override
    public Builder setOS() {
        mComputer.setOS();
        return this;
    }

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

}

测试代码就一句话

代码语言:javascript
复制
    public static void main(String[] args) {
        Computer computer = new MacBookBuilder().setBoard("111")
                .setDisplay("222").setOS().create();
        System.out.println(computer);
    }

你会发现他和装饰类有点像,参考资料在这里: http://blog.csdn.net/u010955843/article/details/24875903

4.总结

优点: (1)良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成细节。 (2)建造者独立,容易扩展。 缺点: (1)会产生多余的Builder对象及Director对象(这里被我简化了),消耗内存。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年03月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.定义
  • 2.使用场景
  • 3.简单实现
  • 4.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档