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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM