美文网首页
Builder模式

Builder模式

作者: Tyhj | 来源:发表于2019-01-29 15:30 被阅读0次

    定义

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

    使用场景

    • 相同的方法,不同的执行顺序,产生不同的结果
    • 多个部件或零件,都可以装配到一个对象中,但是产生的结果不一样
    • 初始化的对象很复杂,参数多,很多都有默认值的时候

    理解

    构造者(建造者)模式,既然是构造而不是生产,就说明我们需要对构造的参数、顺序进行设定,来构造出想要的对象;方便用户创建复杂的对象,使用者不需要关心构建的内部细节,将构建的过程和部件解耦;将对象构建过程和细节进行封装和复用

    举个栗子

    网上已经有很多简单的实现例子,都是比较标准的构建者模式;这里举一个实际项目中的栗子;在Android APP中,一般会有一些弹窗来提示用户比如获取权限、提示出错、等待什么的,一般来说风格都是一样的,有固定的几种按键,固定的几种布局;

    具体的实现

    DialogView就是一个我们需要的自定义的View了,在DialogBuilder中要完成几件事,首先需要一个DialogView对象用来返回,在构造函数中初始化;因为自定义View需要一个Context对象,所以这里传入一个Context

    /**
    * 弹窗
    */
    private DialogView mDialogView;
    public DialogBuilder(Context context) {
        mDialogView = new DialogView(context);
    }
    

    然后为DialogView设置各种参数,继续返回DialogBuilder对象,来形成一个链式调用;

        /**
         * 设置标题
         *
         * @param titleTxt
         * @return
         */
        public DialogBuilder setTitleTxt(String titleTxt) {
            mDialogView.setTitleTxt(titleTxt);
            return this;
        }
    
        /**
         * 设置中间的内容
         *
         * @param contentTxt
         * @return
         */
        public DialogBuilder setContentTxt(String contentTxt) {
            mDialogView.setContentTxt(contentTxt);
            return this;
        }
        ...
    

    最后还有一个create方法,返回需要的DialogView对象

        /**
         * 创建View
         *
         * @return
         */
        public DialogView create() {
            return mDialogView;
        }
    

    其实这个东西和Android弹窗AlertDialog.Builder其实差不多的,都去掉了Director类;但是我这里没有抽象出Builder接口来,因为和AlertDialog.Builder不一样,想要定义出更多样式的弹窗,又不想花太多时间,而且只在一个项目中使用,所以没有去抽象出接口,可能对于拓展不是很友好,但是目前够用了,不够用了再去重构;

    相关文章

      网友评论

          本文标题:Builder模式

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