美文网首页设计模式
设计模式:Builder

设计模式:Builder

作者: 要拿出真本事了 | 来源:发表于2019-08-19 13:48 被阅读0次

    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

    AlertDialog

    相关文章

      网友评论

        本文标题:设计模式:Builder

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