你的位置:首页 > 操作系统

[操作系统]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