建造者模式 , 又称为生成器模式 . 是创建型模式之一 . 与工厂方法模式和抽象工厂模式不同 , 这两种模式的目的是为了实现多态性 , 而建造者模式的目的则是为了将对象的构建与展示分离 . 
    建造者模式是一步一步创建一个复杂对象的创建型模式 , 它允许用户在不知道内部构建细节的情况下 , 可以更精细地控制对象的构造流程 . 一个复杂的对象有大量的组成部分 , 比如汽车它有车轮 , 方向盘 , 发动机 , 以及各种各样的小零件 , 要将这些部件装配成一辆汽车 , 这个装配过程无疑会复杂 , 对于这种情况 , 为了实现在构建过程中对外部隐藏具体细节 , 就可以使用建造者模式将部件和组装过程分离 , 使得构建过程和部件都可以自由扩展 , 同时也能够将两者之间的耦合降到最低 .

1 . 建造者模式的定义

将复杂对象的构造与它的实现相分离 , 让相同的构建过程可以创建不同的对象 .

2 . 建造者模式的特点

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

3 . 建造者模式的组成角色

  • 建造者(Builder)接口 : 为创建一个复杂对象的对应部件所指定的抽象接口 . 这个接口规定要实现复杂对象的哪些部分的创建 , 并不涉及具体的对象部件的创建 . 当只有一个建造者时可省略该接口
  • 具体建造者(ConcreteBuilder) : 实现Builder接口 , 针对不同的业务逻辑 , 具体化复杂对象的各部分的创建 . 在建造过程完成后 , 提供产品的实例 .
  • 具体建造者管理对象(Director) : 使用Builder接口的对象 , 负责按流程来生产具体的复杂对象 , 实际业务中可以经常忽略 , 直接使用建造者来管理
  • 复杂产品对象(Product) : 被构造的复杂对象

4 . 建造者模式的应用场景

  • 复杂对象的创建过程应该独立于该对象的组成部分或当构造过程允许被构造不同的对象时 .
  • 相同的方法 , 不同的执行顺序 , 产生不同的对象 .
  • 多个部件或零件 , 都可以装配到一个对象中 , 但是产生的运行结果又不相同时 .
  • 产品类非常复杂 , 或者产品类中的调用顺序不同产生不同的作用 , 这个时候使用建造者模式非常适合 .
  • 当初始化一个对象特别复杂 , 如参数多 , 且很多参数都具有默认值时 .

5 . 代码实现

package com.xbz.mode.build;//复杂对象
public class Person {/** 头部 */private String head;/** 身体 */private String body;/** 四肢 */private String foot;//省略get/set
}
package com.xbz.mode.build;//创建者接口 , 为创建一个复杂对象的对应部件所指定的抽象接口
public interface IPersonBuilder {void buildHead();void bulidBody();void buildFoot();Person buildPerson();//组装
}
package com.xbz.mode.build;//具体创建者1 实现Builder的接口以构造对象的各个部件
public class ManBuilder implements IPersonBuilder {private Person person;public ManBuilder() {person = new Person();}@Overridepublic void buildHead() {person.setHead("男人的头部");}@Overridepublic void bulidBody() {person.setBody("男人的身体");}@Overridepublic void buildFoot() {person.setFoot("男人的四肢");}@Overridepublic Person buildPerson() {System.out.println("成功创建了一个男人");return person;//返回一个person实例}
}
package com.xbz.mode.build;//具体创建者2 实现Builder的接口以构造对象的各个部件
public class WoManBuilder implements IPersonBuilder {private Person person;public WoManBuilder() {person = new Person();}@Overridepublic void buildHead() {person.setHead("女人的头部");}@Overridepublic void bulidBody() {person.setBody("女人的身体");}@Overridepublic void buildFoot() {person.setFoot("女人的四肢");}@Overridepublic Person buildPerson() {System.out.println("成功创建了一个女人");return person;//返回一个person实例}
}
package com.xbz.mode.build;//具体创建者管理对象 , 负责按流程来生产具体的复杂对象
public class PersonDirector {public Person constructPerson(IPersonBuilder builder) {builder.buildHead();builder.bulidBody();builder.buildFoot();return builder.buildPerson();}
}
public static void main(String[] args){PersonDirector director = new PersonDirector();Person man = director.constructPerson(new ManBuilder());Person woman = director.constructPerson(new WoManBuilder());
}

6 . 总结

6.1 建造者模式的优点

  1. 降低代码耦合度 . 将一个复杂对象的创建过程封装起来 , 使得客户端不必知道产品内部组成的细节
  2. 允许对象通过多个步骤来创建 , 并且可以改变过程和选择需要的过程
  3. 产品的实现可以被替换 , 因为客户端只看到一个抽象的接口
  4. 创建者独立 , 容易扩展

6.2 建造者模式的缺点

  1. 一定的使用范围限制 . 建造者模式的产品的组件基本相同 , 如果产品的差异性较大 , 建造者模式就不适用了
  2. 会产生多余的 Builder 对象以及 Director 对象 , 消耗内存
  3. 与工厂模式相比 , 采用 Builder 模式创建对象的实例 , 增加了理解难度

6.3 建造者模式和工厂模式的对比

建造者模式 工厂方法模式
创建型 创建型
将一个产品类对象的创建过程封装起来 , 让客户端从具体产品类的生成中解耦 , 不必了解产品类构造的细节 将一个产品类对象的创建过程封装起来 , 让客户端从具体产品类的生成中解耦 , 不必了解产品类构造的细节
建造者模式允许对象的创建通过多个步骤来创建 , 而且可以改变这个过程 , 也可以选择需要改变的属性 只有一个步骤 , 也就无法改变这个过程 , 更加无法选择性改变属性
目的是将复杂对象的构建和它的表示分离 定义一个创建对象的接口 , 由子类决定要实例化的类是哪一个 , 将实例化推迟到子类
调用者可以调用 set 方法 只能调用工厂类提供的相关方法

JAVA设计模式 - 建造者模式相关推荐

  1. Java 设计模式——建造者模式(Builder Pattern)

    前言 一.简介 ​二.实现方式 三.常见第一种方式 (1)一般有以下几个角色 (2)举个例子 (3)具体步骤 (4)具体代码 三.第二种方式 (1)主要有三个角色:抽象建造者.具体建造者.产品 (2) ...

  2. 我的Java设计模式-建造者模式

    在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...

  3. Java设计模式 建造者模式

    前言 建造者模式(Builder Pattern)又称为创建者模式,建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在该模 ...

  4. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  5. java设计模式-建造者模式

    概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...

  6. Java设计模式-建造者模式 理论代码相结合

    继工厂模式后的建造者模式,也是java中常常能够见到的模式一种,应用场景也比较广,比较好用. 大家想了解的话,一起来看一看啦.

  7. JAVA设计模式--建造者模式

    目录 前言 一.什么是建造者模式 二.建造者模式的结构 三.建造者模式应用场景 参考文章 前言 在听完厉风行老师<设计模式系列课程>中的建造者模式一节后顿时感觉有点头大,感觉它有点像工厂方 ...

  8. Java 设计模式 -- 建造者模式

    建造者模式 建造者模式就是一步一步的创建一个复杂的对象,而且允许用户指定复杂对象的类型和内容. Builder 类是一个抽象类,用于定义一些创建子部件的方法,Builder类中应该还有一个 getRe ...

  9. 【面试高频】Java设计模式-建造者模式

    ⭐️写在前面 这里是温文艾尔的学习之路

最新文章

  1. 为数字世界和通证经济健康发展保驾护航 币氪产品发布会在蓉举行
  2. 数据库入门浅析:ASP.NET与MySQL连接
  3. Dokcer安装Redis
  4. 单片机原理及其应用——单片机控制按键点亮发光二极管
  5. 使用Hadoop计算共现矩阵
  6. 电脑重启 硬件问题引发的人品问题
  7. 计算机专业中专自我鉴定范文,计算机专业中专生自我鉴定范文
  8. 一种数字全息自动聚焦技术研究及实例分析
  9. 手游游戏资源提取 (破解、AssetStudio、VGMToolbox、disunity、Il2CppDumper、 .NET Reflector)...
  10. YOLO3的一些理解
  11. GAT GAX 简介
  12. 微信公众号、订阅号、服务号区别
  13. 树莓派python编程自学-基于树莓派的python GPIO编程-常用函数综合整理
  14. 银河麒麟4.0.2安装
  15. 网易云--荣格心理学测验
  16. Python3入门教程:Excel 基础操作(上)
  17. IDEA封神榜大语言模型二郎神系列Erlangshen-Ubert-110M-Chinese使用
  18. 遇见你是我最美的意外
  19. dw自定义html模板,用DW编辑网站模板的方法
  20. C语言图书管理系统[2023-01-06]

热门文章

  1. npm aes 加密(js aes 加密)
  2. js脚本捕获页面 GET 方式请求的参数?其实直接使用 window.location.search 获得
  3. 一些不错的计算机书籍
  4. li标签行内元素高度及居中
  5. 使用PDO连接数据库 查询和插入乱码的解决方法
  6. 【原创】php+mysql下,对网站架构方面的一些认识(以我维护的站点为例)
  7. OpenCV3学习(12.4) 粒子滤波Condensation算法
  8. R7-9 模拟EXCEL排序 (25 分)
  9. 7-8 最长连续递增子序列 (15 分)
  10. DIY制作otto机器人