设计模式之构造者模式Builder
2019-07-21 本文已影响0人
sssssss_
构造者模式定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
简单的说就是一步步创建一个复杂的对象,它运行用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。不知道算不算是封装的一种形式,哈哈哈。
构造者模式使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果。
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用。
- 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。
构造者模式在Android中的使用
- AlertDialog.Builder
- 第三方开源框架Glide、Retrofit等等
构造者模式UML图
Builder UML构造者模式优缺点
优点:
- 良好的封装性,可以在调用过程不需知道产品内部组成的细节。
- 建造者独立,容易扩展。
缺点:
- 会产生多余的Builder对象,消耗内存。
构造者模式实现
/**
* Created by SongSong on 2019/6/11 0011
*/
public class Product {
private String mPartA;
private String mPartB;
private String mPartC;
public static class ProductBuilder {
Product mProduct;
public ProductBuilder() {
this.mProduct = new Product();
}
public ProductBuilder buildPartA(String PartA) {
this.mProduct.mPartA = PartA;
System.out.println(PartA);
return this;
}
public ProductBuilder buildPartB(String PartB) {
this.mProduct.mPartB = PartB;
System.out.println(PartB);
return this;
}
public ProductBuilder buildPartC(String PartC) {
this.mProduct.mPartC = PartC;
System.out.println(PartC);
return this;
}
public Product build() {
return mProduct;
}
}
public static void main(String[] args) {
Product product = new Product.ProductBuilder()
.buildPartA("aaa")
.buildPartB("bbb")
.buildPartC("ccc")
.build();
}
}
AlertDialog的源码
AlertDialog是我在刚学Android的时候就已经接触到的控件,当时觉得使用起来非常方便,点一下就添加一种信息进去,在最后show一下就能显示一个对话框,觉得非常神奇。
/**
* AlertDialog的基本使用
* @param context
*/
private void showDialogBuilder(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_launcher_background);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("按钮1", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d(TAG, "onClick: 按钮1");
}
});
builder.setNegativeButton("按钮2", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d(TAG, "onClick: 按钮2");
}
});
builder.create().show();
}
效果图:
AlertDialog.png
源码分析:
我认为这个笔者对 AlertDialog 的源码分析得非常清晰,所以将他的文章贴出来,让大家一起学习。
参考文章:https://www.jianshu.com/p/6c096a410078
总结
构造者模式Builder在Android开发中都是作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离开来,避免过多的setter方法。
在学习完之后,觉得这个设计模式可以大大提高复用性,对于源码方面还要继续加强学习。