美文网首页设计模式
设计模式之构造者模式Builder

设计模式之构造者模式Builder

作者: sssssss_ | 来源:发表于2019-07-21 01:49 被阅读0次

    构造者模式定义

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

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


    构造者模式使用场景

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

    构造者模式在Android中的使用

    1. AlertDialog.Builder
    2. 第三方开源框架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方法。

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

    相关文章

      网友评论

        本文标题:设计模式之构造者模式Builder

        本文链接:https://www.haomeiwen.com/subject/jqmxfctx.html