前言

Builder模式是一种创建型设计模式

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

使用场景:

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时;
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
  3. 初始化一个对象特别复杂,如参数较多,且很多参数都具有默认值时;

UML类图:

  • Product:产品类;
  • Builder:抽象Builder类,规范产品的组建,一般由子类实现具体的组建过程;
  • ConcreteBuilder:具体的Builder类;
  • Director:统一组装过程;

实现方式

UML图中类较多,关系也比较复杂,一般情况下,我们通常会简化相关实现,这里我们举个简单例子,

电脑一般由主板、操作系统、显示器几部分组成,那使用建造者模式构建一台电脑可以这样表示:

class Computer private constructor() {/*** 主板*/private var board: String? = null/*** 操作系统*/private var os: String? = null/*** 显示器*/private var display: String? = nullclass Builder {private val computer = Computer()fun build(): Computer {return computer}fun setBoard(board: String?): Builder {computer.board = boardreturn this}fun setOs(os: String?): Builder {computer.os = osreturn this}fun setDisplay(display: String?): Builder {computer.display = displayreturn this}}override fun toString(): String {return "Computer(board=$board, os=$os, display=$display)"}
}

构建Computer对象:

Computer.Builder().setBoard("Intel").setOs("MacOs").setDisplay("Retina").build()

Android源码中的建造者模式

  • AlertDialog的构建过程
  • OkHttpClient的构建过程

总结

建造者模式的优缺点:
优点:

  1. 良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节;
  2. 建造者独立,容易扩展;

缺点:

产生多余的Builder以及Director对象,消耗内存;

结语

如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )

Android设计模式详解之建造者模式相关推荐

  1. Android设计模式详解之解释器模式

    前言 解释器模式是一种使用较少的行为型模式: 提供了一种解释语言的语法或表达式的方式,通过该接口解释一个特定的上下文. 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示 ...

  2. 设计模式详解:建造者模式

    今天来看一下创建新模式中的第五种模式:建造者模式.仍然是先看两张图,复习模式类型,加深记忆. 定义: 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Build ...

  3. Android设计模式详解之备忘录模式

    前言 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态: 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢 ...

  4. Android设计模式(一)—— 建造者模式

        其实设计模式,只是一种定式,适用于不同的语音,今天,虽然加上了Andorid的前缀,只是因为举例仅是android代码,所以学好内在,则举例仅是举例,内涵才是到处通用的. 建造者模式解释:  ...

  5. Android设计模式详解之责任链模式

    前言 责任链模式是行为型设计模式: 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 使用场景: 多 ...

  6. Android设计模式详解之观察者模式

    前言 观察者常用于订阅-发布系统,能够将观察者和被观察者进行解耦,降低两者之间的依赖: 定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新. ...

  7. C++设计模式详解之外观模式解析

    C++ 外观模式 外观模式定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用. 个人理解:外观模式,实际就是添加一层封装 比较简单 外观模式实例 ...

  8. C++设计模式详解之模板模式解析

    C++ 模板方法模式解析 模板方法模式定义 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现 模板方法模式实例 以考试为例,考数学和考语文的过程几乎都是一样的,就是准备考试,背书,写试 ...

  9. C++设计模式详解之命令模式解析

    C++ 命令模式定义 命令模式将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象. 个人理解: 命令模式,其实实质上就是去耦合的操作,让各个部分尽可能的关联性降低,以便修改或增加某些功 ...

最新文章

  1. 在mybatis中模糊查询有三种写法
  2. 黑鲨科学计算机,科学技术篇:玩家注意黑鲨一口气发布两款重磅新品
  3. [原创].图解一招搞定UCWEB@Nokia S60v5无法在博客园手机版发闪存的问题
  4. 天平思想—寻找数组中心索引
  5. 语文课外运用计算机探究,[小学语文]计算机在小学写字教学中的运用之我见
  6. 实战scrapy-爬取红袖添香前20页小说
  7. python对矩阵对角线进行赋值
  8. 为企业搭建Gitlab软件版本管理服务器
  9. WCF中因序列化问题引起的异常和错误。
  10. SyntaxError: unexpected EOF while parsing成功解决
  11. 【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
  12. 计算机类毕业设计源码大全
  13. excel冻结行和列_Spire.Cloud.Excel 冻结或解除冻结Excel中的行和列
  14. 小学计算机应用计划,小学计算机教学计划
  15. 创建简易的金融数据库
  16. c++、python实现置换密码(栅栏技术,列置换)、替代密码(加法密码(Caesar密码),乘法密码)
  17. Linux 内核clk 硬件相关层
  18. 已知二叉树的后序序列和中序序列,求先序序列。
  19. 北漂生活-租房那些事
  20. 我的2013年总结--北京 深圳

热门文章

  1. Adobe国际认证证书对职业应聘有用吗?
  2. SDN/NFV标准组织SDN架构
  3. 事件对象,事件流(事件冒泡和事件捕获)、事件委托、L0和L2注册等相关概念及用法
  4. darknet学习笔记
  5. 统计分析/机器学习吐血整理最强指南(第二版)
  6. 钙锌复合稳定剂-市场现状及未来发展趋势
  7. 计算机系统总线功能组,计算机组到成原理(华科版)第六章 系统总线.ppt
  8. Windows下和程序员相关小工具
  9. 质量保证漫漫谈之QA常用的几种报告
  10. 成功运营网站要注意的三个方面