最近在學習圖片載入框架Glide的時候,被他精簡的寫法震驚了。一句話,就可以搞定。 同時在年初的時候,學習RXJava的時候,用鏈式編程很優雅。 今天就來學習一下,建造者模式在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