java设计模式(五)--建造者模式(Builder)

转载:http://zz563143188.iteye.com/blog/1847029

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。我们看一下代码:

还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender。最后,建造者类如下:

/**
 * 建造者模式
 * Created by mrf on 2016/2/29.
 */
public class Builder {
    private List<Sender> list = new ArrayList<>();

    public List<Sender> produceMailSender(int count){
        for (int i = 0; i < count; i++) {
            list.add(new MailSender());
        }
        return list;
    }

    public List<Sender> produceSmsSender(int count){
        for (int i = 0; i < count; i++) {
            list.add(new SmsSender());
        }
        return list;
    }
}

  测试:

public class BuilderTest {

    @Test
    public void testProduceMailSender() throws Exception {
        Builder builder = new Builder();
        List<Sender> senders = builder.produceMailSender(10);
        System.out.println(senders);
    }

    @Test
    public void testProduceSmsSender() throws Exception {

    }
}

  从这点看出,建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。因此,是选择工厂模式还是建造者模式,依实际情况而定。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

超级玛丽游戏

10:超级玛丽游戏 总时间限制:1000ms 内存限制:65536kB 描述 超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。 ...

3368
来自专栏HTML5学堂

如何清除浮动

如何清除浮动 大家都知道,浮动会对文档产生影响,具体来看看会对文档产生什么影响? 清除浮动后的效果: ? 未清除浮动后的效果: ? 实例代码(未清除浮动): ...

36210
来自专栏数据小魔方

R语言抓包实战——知乎live二级页面获取

之前曾经写过一篇关于知乎live课程信息爬取的短文,那个直接遍历的知乎live主页上展示的部分课程,仅仅是很小的一部分。 今日这一篇将是该小项目的升级版,直接对...

35110
来自专栏西枫里博客

Python学习笔记二(变量和字符串)

2017年年终确定的从2018年开始学习一门新的语言。随着机器学习人工智能的日渐深入,是时候有必要掌握以下Python了。博客今天更新第二篇学习记录,关于Pyt...

812
来自专栏黄Java的地盘

CSS transition delay简介与进阶应用

我相信这是一个很常见的一个需求,有很多种方式能够实现,但是,其实现方式的原理各不相同,也有利有弊。

342
来自专栏跟着阿笨一起玩NET

display:none与visible:hidden的区别

display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:

361
来自专栏生信宝典

为啥我的Python这么慢 - 项查找 (二)

上一篇为啥我的Python这么慢, 字符串的加和和join被陈群主分享到biopython-生信QQ群时,乐平指出字典的写法存在问题,并给了一篇知乎的链接htt...

1729
来自专栏企鹅号快讯

Python数据类型—字符串(1)

Python数据类型 — 字符串(1) 除了数值,我们还常常需要对文字进行处理。本文将介绍Python用于文字处理的数据类型 — 字符串,并解释如何在计算机系统...

1818
来自专栏木可大大

【福利】全网最热Python3入门+进阶 更快上手实际开发

最近有不少朋友问我该如何学习Python,因此,本期为大家分享的福利是 " 全网最热Python3入门+进阶 更快上手实际开发"课程,该课程将带你从基础入门Py...

6378
来自专栏xingoo, 一个梦想做发明家的程序员

VS报错:DEBUG Assertion Failed!

使用vs2010时,遇到如下错误 ? 然后点击继续后: ? 点击终止: ? 观察变量: ? 根据提示发现,有可能是断点问题,于是猜想可能是指针的错误。 goog...

1879

扫描关注云+社区