Android设计模式详解之建造者模式
前言
Builder模式是一种创建型设计模式
。
定义:
将一个复杂对象的创建与它的表示分离,使得同样的构造过程可以创建不同的表示。
使用场景:
- 相同的方法,不同的执行顺序,产生不同的事件结果时;
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
- 初始化一个对象特别复杂,如参数较多,且很多参数都具有默认值时;
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的构建过程
总结
建造者模式的优缺点:
优点:
- 良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节;
- 建造者独立,容易扩展;
缺点:
产生多余的Builder以及Director对象,消耗内存;
结语
如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )
Android设计模式详解之建造者模式相关推荐
- Android设计模式详解之解释器模式
前言 解释器模式是一种使用较少的行为型模式: 提供了一种解释语言的语法或表达式的方式,通过该接口解释一个特定的上下文. 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示 ...
- 设计模式详解:建造者模式
今天来看一下创建新模式中的第五种模式:建造者模式.仍然是先看两张图,复习模式类型,加深记忆. 定义: 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Build ...
- Android设计模式详解之备忘录模式
前言 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态: 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢 ...
- Android设计模式(一)—— 建造者模式
其实设计模式,只是一种定式,适用于不同的语音,今天,虽然加上了Andorid的前缀,只是因为举例仅是android代码,所以学好内在,则举例仅是举例,内涵才是到处通用的. 建造者模式解释: ...
- Android设计模式详解之责任链模式
前言 责任链模式是行为型设计模式: 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 使用场景: 多 ...
- Android设计模式详解之观察者模式
前言 观察者常用于订阅-发布系统,能够将观察者和被观察者进行解耦,降低两者之间的依赖: 定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新. ...
- C++设计模式详解之外观模式解析
C++ 外观模式 外观模式定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用. 个人理解:外观模式,实际就是添加一层封装 比较简单 外观模式实例 ...
- C++设计模式详解之模板模式解析
C++ 模板方法模式解析 模板方法模式定义 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现 模板方法模式实例 以考试为例,考数学和考语文的过程几乎都是一样的,就是准备考试,背书,写试 ...
- C++设计模式详解之命令模式解析
C++ 命令模式定义 命令模式将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象. 个人理解: 命令模式,其实实质上就是去耦合的操作,让各个部分尽可能的关联性降低,以便修改或增加某些功 ...
最新文章
- 在mybatis中模糊查询有三种写法
- 黑鲨科学计算机,科学技术篇:玩家注意黑鲨一口气发布两款重磅新品
- [原创].图解一招搞定UCWEB@Nokia S60v5无法在博客园手机版发闪存的问题
- 天平思想—寻找数组中心索引
- 语文课外运用计算机探究,[小学语文]计算机在小学写字教学中的运用之我见
- 实战scrapy-爬取红袖添香前20页小说
- python对矩阵对角线进行赋值
- 为企业搭建Gitlab软件版本管理服务器
- WCF中因序列化问题引起的异常和错误。
- SyntaxError: unexpected EOF while parsing成功解决
- 【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
- 计算机类毕业设计源码大全
- excel冻结行和列_Spire.Cloud.Excel 冻结或解除冻结Excel中的行和列
- 小学计算机应用计划,小学计算机教学计划
- 创建简易的金融数据库
- c++、python实现置换密码(栅栏技术,列置换)、替代密码(加法密码(Caesar密码),乘法密码)
- Linux 内核clk 硬件相关层
- 已知二叉树的后序序列和中序序列,求先序序列。
- 北漂生活-租房那些事
- 我的2013年总结--北京 深圳