设计模式

设计模式之构造者模式Builder

2019-07-21  本文已影响0人  sssssss_

构造者模式定义

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

简单的说就是一步步创建一个复杂的对象,它运行用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。不知道算不算是封装的一种形式,哈哈哈。


构造者模式使用场景

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

构造者模式在Android中的使用

  1. AlertDialog.Builder
  2. 第三方开源框架Glide、Retrofit等等

构造者模式UML图

Builder UML

构造者模式优缺点

优点:

缺点:


构造者模式实现

/**
 * 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方法。

在学习完之后,觉得这个设计模式可以大大提高复用性,对于源码方面还要继续加强学习。

上一篇下一篇

猜你喜欢

热点阅读