zoukankan      html  css  js  c++  java
  • Android Builder模式在开发中的应用

    最近在学习图片加载框架Glide的时候,被他精简的写法震惊了。一句话,就可以搞定。

    Glide.with(mContext)
         .load(url)
         .centerCrop()
         .placeholder(R.drawable.default_img)
         .crossFade()
         .into(mImageView);
    

     

    同时在年初的时候,学习RXJava的时候,用链式编程很优雅。

         Observable
                    .just( "1" , "2" )
                    .subscribeOn(Schedulers.io() )
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Action1<String>() {
                        @Override
                        public void call(String s) {
    
                        }
                    }) ;
    

      

    今天就来学习一下,建造者模式在Android中简单应用 。

    Builder 的好处

    • 代码可读性好,只需要写一句代码,链式编程很优雅
    • 方便。通过不同的组合就可以创建不同的对象
    • 解耦。不需要知道细节,将对象本身与对象构造过程分离。

    Builder 模式要怎么写?

    package com.app.lib;
    
    /**
     * Created by ${zyj} on 2016/6/27.
     */
    public class UserMoule {
    
        private String id ;
        private String name ;
    
        public UserMoule( String id , String name ){
            this.id = id ;
            this.name = name ;
        }
    
        static class Builder {
            private  String id ;
            private  String name ;
    
            public Builder setId(String id) {
                this.id = id;
                return this ;
            }
    
            public Builder setName(String name) {
                this.name = name;
                return this ;
            }
    
            public UserMoule create(){
                return new UserMoule( id , name ) ;
            }
        }
    
    }
    

      调用

          new UserMoule.Builder()
                    .setId( "id")
                    .setName( "json")
                    .create() ;
    

      

    为什么 Builder 要用 Static 修饰?

    一般写内部类的意图都是为了说明该类和宿主类关系密切,而private , static , final 这些可以单独拿出来说,static这个区别比较大,没有static修饰,说明此类必须依赖宿主类的对象;而有static修饰,就不依赖与对象的存在了,类名. 即可,整体类似方法上添加static。private这玩意,完全取决于你是否希望将此类暴露出去;final则是为了标明该类不可继承修改.

         而且

    使用static就如同你新建了一个JAVA文件,静态内部类不会保持对外部类的引用。如果你的builder需要外部类的引用,那它Build就没有意义了,所以必须加static。

    总结

    • 使用 Builder 模式可以解耦,更方便地构造不同的对象
    • Builder 类要用 static 修饰
    • 这里使用了简化的Builder模式,将抽象建造者省略,并且也省略了指导者角色 。

    相关链接:http://www.jianshu.com/p/5d9db54892c8

  • 相关阅读:
    Building workspace has encountered a proble
    Eclipse异常关闭,IDE Exception Handler has encountered a problem An internal error has occurred
    jsp中写java代码的方法
    如何在jsp里面写java代码
    jsp中在java里面怎么调文本框里面的值?
    Typescript基本认识
    运行flutter run 报错Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
    H5+原生webview实现APP的JavascriptBridge的使用
    vue mounted里使用window.onresize报错问题
    关于elmentui 抽屉 el-drawer 的slot插入的内容无法通过ref访问的问题
  • 原文地址:https://www.cnblogs.com/zhaoyanjun/p/5621284.html
Copyright © 2011-2022 走看看