美文网首页
Android Builder模式笔记

Android Builder模式笔记

作者: Android__Tower | 来源:发表于2019-01-03 15:51 被阅读0次

Builder模式介绍

Builder模式又称建造者模式,表示将构建过程和表示过程进行分离,让(参数)构建过程变得更加的简单和直观。
Builder模式主要用于复杂对象的构造,通过使用Builder模式可以减少构造器或方法调用传入的参数数量。这对有很多个配置参数进行初始化的对象来说尤其适用。
在实际的开发过程中,例如对OkHttp进行初始化的的代码如下:

        OkHttpClient client = new OkHttpClient();
        client.writeTimeoutMillis();
        client.callTimeoutMillis();
        client.readTimeoutMillis();
        client.connectTimeoutMillis();
        client.interceptors();

当使用Builder模式时代码如下:

        OkHttpClient client1 = new OkHttpClient.Builder()
                .writeTimeout()
                .callTimeout()
                .addInterceptor()
                .readTimeout()
                .build();

可以看到代码简单清晰很多了。下面用Builder模式实现一下NavigationBar。

AbsNavigationBar的内部内 Builder中 可以看到两个方法Builder和creat

    public static class Builder extends AbsNavigationBar.Builder<NavigationBar.Builder>{
        public Builder(Context context, int layoutId, ViewGroup parent) {
            super(context, layoutId, parent);
        }
        @Override
        public AbsNavigationBar create() {
            return new NavigationBar(this);
        }
    }

接下来点进Builder方法中可以看到,Builder中做了1.用来创建 NavigationBar 2. 还有存储参数

   public static abstract class Builder<B extends Builder>{
        public Context mContext;
        public int mLayoutId;
        public ViewGroup mParent;
        public Map<Integer,CharSequence> mTextMaps;
        public Map<Integer,View.OnClickListener> mClickListenerMaps;

        public Builder(Context context,int layoutId,ViewGroup parent){
            this.mContext = context;
            this.mLayoutId = layoutId;
            this.mParent = parent;
            mTextMaps = new HashMap<>();
            mClickListenerMaps = new HashMap<>();
        }

        /**
         * 用来创建 NavigationBar
         * @return
         */
        public abstract AbsNavigationBar create();

        /**
         * 设置文本
         * @param viewId
         * @param text
         * @return
         */
        public B setText(int viewId,String text){
            mTextMaps.put(viewId,text);
            return  (B)this;
        }
        /**
         * 设置点击事件
         * @param viewId
         * @param onClickListener
         * @return
         */
        public B setOnClickListener(int viewId,View.OnClickListener onClickListener){
            mClickListenerMaps.put(viewId,onClickListener);
            return (B) this;
        }
    }

在create方法中,可以看到做的事情是将 builder方法中 获取到的参数设置给navigationBar

    protected AbsNavigationBar(B builder){
        this.mBuilder = builder;
        createNavigationBar();
    }
    @Override
    public void createNavigationBar() {
        mNavigationBar = LayoutInflater.from(mBuilder.mContext)
                .inflate(mBuilder.mLayoutId,mBuilder.mParent,false);
        /**
         * 添加
         */
        attachParent(mNavigationBar,mBuilder.mParent);
        /**
         * 绑定参数
         */
        attachNavigationParams();
    }

至此已经完成对NavigationBar的创建。
由navigationBar的创建,可以看出来 建造者模式可以 将构建过程和表示过程进行分离,让(参数)构建过程变得更加的简单和直观。

相关文章

网友评论

      本文标题:Android Builder模式笔记

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