前言
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? = null
class Builder {
private val computer = Computer()
fun build(): Computer {
return computer
}
fun setBoard(board: String?): Builder {
computer.board = board
return this
}
fun setOs(os: String?): Builder {
computer.os = os
return this
}
fun setDisplay(display: String?): Builder {
computer.display = display
return 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对象,消耗内存;
结语
如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )