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

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

public class Builder {private List<Sender> list = new ArrayList<Sender>();public void produceMailSender(int count){for(int i=0; i<count; i++){list.add(new MailSender());}}public void produceSmsSender(int count){for(int i=0; i<count; i++){list.add(new SmsSender());}}
}

测试类:

public class Test {public static void main(String[] args) {Builder builder = new Builder();builder.produceMailSender(10);}
}

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

Java的二十三种设计模式(建造者模式(Builder))相关推荐

  1. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  2. Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)

    从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析. 创建型模式(5种):用于描述"怎样创建对象",它的主要特点是& ...

  3. Java的二十三种设计模式

    设计模式介绍及Java描述 概述 设计模式是针对某一类问题的最优解决方案,是从许多优秀的软件系统中总结出的. Java中设计模式(java design patterns)通常有23种. 模式可以分成 ...

  4. Java的二十三种设计模式(原型模式(Prototype))

    原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通过对象的复制,进行讲解.在Java中 ...

  5. Java的二十三种设计模式(适配器模式(Adapter)、对象的适配器模式)

    适配器模式(Adapter) 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式 ...

  6. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  7. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  8. Java二十三种设计模式 之代理(proxy)

    Java二十三种设计模式 之代理(proxy) 今天我们学习一下静态代理和动态代理 我们来看代码(写一个坦克运行了多少时间): 第一种方法: public calss Tank implements ...

  9. 第二部分:二十三种设计模式解读——什么是工厂方法模式

    二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...

最新文章

  1. jieba词性说明字典
  2. 【杂谈】GAN最成功的3个商业化落地领域,你是否了解过?
  3. flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码-阿里云开发者社区...
  4. C# DirectX 开发2 - 定义一个矩阵和赋值
  5. 【Android】不使用WebView来执行Javascript脚本(Rhino)
  6. Python类三种方法,函数传参,类与实例变量
  7. django-中间件
  8. 你的计算机usb管理策略,您的计算机已经实施了USB存储设备管理策略,系统发现你使用了USB存储设备,该设备已被阻止,如有疑问请与...
  9. Activity与Fragment的onActivityResult细节
  10. 机器学习——LBP特征
  11. [20190718]12c rman新特性 表恢复.txt
  12. 如何破解excel打开密码
  13. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响
  14. 【软件工程】求10个数最大值和平均值 以流程图、盒图、PRD图的形式画出
  15. 基于JAVA机票预定系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  16. 证件识别技术,OCR扫描识别
  17. matlab仿真与控制应用,控制系统MATLAB仿真与应用
  18. 华为云桌面服务器地址怎么看,探索华为FusionAccess云桌面的真面目
  19. 薰衣草的花语~~~~~~等待爱情
  20. 2022最新总结【Java岗面试核心笔记】速成版

热门文章

  1. # 模糊图片边缘_PS大神给你变个魔术,如何巧用PS把模糊的照片变清晰
  2. 正则提取字符串-python
  3. [转]jquery的一个模板引擎-zt
  4. 知识点 - python 类的私有/保护 属性和方法
  5. PureXXX使用手记
  6. webpack的安装和使用
  7. Android菜鸟的成长笔记(13)——异步任务(Async Task)
  8. ffmpeg利用libav库把yuv视频流转换为TS串流
  9. 查看sqlserver版本
  10. 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?