Builder模式基本介绍
Builder模式的实现
源码中的Builder模式记录
Builder模式基本介绍
Builder模式被广泛应用,在Android SDK中经常能看到
比如最为常用到的 AlertDialog 的构建过程就是使用Builder模式
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("Title")
.setIcon(R.drawable.design_patterns)
.setMessage("Message")
.setNegativeButton("Button", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle("click");
}
});
builder.create().show();
Builder模式意在构建过程中对外部隐藏实现细节,使得构建过程和部件可以自由扩展,降低两者的耦合度
其定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
适用于:
- 相同的方法,不同的执行顺序,产生不同的结果
- 多个部件或零件,都可以组装到一个对象中,但是产生的运行结果不同
- 类很复杂,类中方法调用顺序不同产生不同的结果
- 一个类的初始化特别复杂
优点:
- 良好的封装性,可以使用户不必知道产品内部组成细节
- Builder独立,容易扩展
缺点:
- 产生多余的Builder对象,消耗内存
Builder模式的实现
要实现Builder模式,就要知道为什么需要使用它
定义中显示,Builder模式的使用场景是复杂多变的构建过程,用一个实际的例子来说就是ImageLoad工具类
图片加载工具类涉及的构建过程包含线程池、缓存策略、加载策略、加载失败显示的图片等
未使用Builder模式会产生的问题在于,创建类之后需要经过一系列的set方法设置工具类必须的配置,这需要工具类提前定义一套默认的实现,因为调用者可能不会调用set类方法配置,或者在使用过程中动态的改变配置,这维护成本是很高的,且很容易报错
使用Builder模式把设置配置这一块分离出来,用户创建图片加载工具类时只需要先在Builder类中完成配置信息调用链的调用,然后调用方法根据配置信息生成工具类实例,使配置和使用分离,避免调用者在使用途中修改配置造成异常
在我看来,没有绝对的标准规定你要怎么做,Builder模式的核心实现就是把复杂的构建过程分离出配置类,使调用者可以通过配置类一次性的配置,用于生成一个或多个实例对象
配置类中包含需要配置的内容和一个静态内部类包含一系列的set方法用于设置配置信息,工具类中包含读取配置类信息创建实例的方法
源码中的Builder模式记录
AlertDialog
网友评论