編輯:關於Android編程
經典Builder模式
1) 定義:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
2) 經典的Builder模式有四個參與者
Product:被構造的復雜對象 Builder:抽象接口,用來定義創建Product對象的各個組成部3) 簡單代碼形式
public class Product { private String mName; private int mAge; public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public int getmAge() { return mAge; } public void setmAge(int mAge) { this.mAge = mAge; } }
public interface Builder { void buildName(); void buildAge(); Product getProduct(); }
public class ConcreteBuilder implements Builder { private Product mProduct; @Override public void buildName() { } @Override public void buildAge() { } @Override public Product getProduct() { return mProduct; } }
public class Director { private Builder mBuilder; public Director(Builder builder) { mBuilder = builder; } public void buildProduct() { mBuilder.buildName(); mBuilder.buildAge(); } public Product getProduct() { return mBuilder.getProduct(); } }
4) 經典的Builder模式重點在於抽象出對象創建的步驟,並通過調
用不同的具體實現從而得到不同的、
Builder模式的變種(Android Builder模式)
1) 變種的Builder模式的目的在於減少對象創建過程中引用的多
個重載構造方法、可選參數和setters過度使用導致的不必要的復
雜性。下面以一個簡單對象Person對象創建過程為例子說明,它
具有如下所示的屬性,且都是不可變的final的。
public class Person{ private final String mName; //必選 private final int mAge; //必選 private final int mGender; //必選 private final String mAddress; //可選 }
由於已經將屬性聲明為final,因此必須在構造函數中對屬性進行
賦值,由於屬性有必選和可選之分,也就是說構造方法需要提供
可以選擇忽略可選參數的方式。兩種方案如下代碼所示:
構造方法初始化
public Person(String name,int age,int gender){ this(name,age,gender,"") } public Person(String name,int age,int gender,String address){ mName = name; mAge = age; mGender = gender; mAddress = address; }
JavaBeans規范(無參構造方法,提供getters和setters方法)
public class Person { private String mName; private int mAge; private int mGender; private String mAddress; public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public int getmAge() { return mAge; } public void setmAge(int mAge) { this.mAge = mAge; } public int getmGender() { return mGender; } public void setmGender(int mGender) { this.mGender = mGender; } public String getmAddress() { return mAddress; } public void setmAddress(String mAddress) { this.mAddress = mAddress; }
JavaBeans方案的好處是易於閱讀和維護,使用Person只需要
創建實例對象,調用setters方法設置必要的屬性即可。但這樣
做存在兩個缺點:Person類是可變的;Person類是不連續狀態
的(只有所有的setters方法被調用後,才是連續狀態)。
那麼怎樣才可以具有前面方案的優點,又不存在它們的缺點呢
?(變種的Builder模式Android Builder模式)
2) Builder模式的變種(Android Builder模式)
``` public class Person { private final String mName; private final int mAge; private final int mGender; private final String mAddre; private Person(Builder builder) { mName = builder.mName; mAge = builder.mAge; mGender = builder.mGender; mAddre = builder.mAddre; } public int getmAge() { return mAge; } public int getmGender() { return mGender; } public String getmName() { return mName; } public String getmAddre() { return mAddre; } public static final class Builder { private String mName; private int mAge; private int mGender; private String mAddre; public Builder(String name, int age, int gender) { mName = name; mAge = age; mGender = gender; } public Builder mAddre(String val) { mAddre = val; return this; } public Person build() { return new Person(this); } } } ```
Person類的構造方法是私有的,不可以直接通過new來創建實例
Person類是不可變的,對屬性值只提供getter方法
最後,創建一個Person對象
``` public Person getPerson() { return new Person.Builder("Wxq", 23, 1) .mAddre("China") .build(); } ```
Android Studio自動生成變種Builder模式
安裝好後重啟Android Studio,只需要把屬性名確定下來,alt鍵+insert鍵,選擇builder按鈕即可(快捷鍵Alt+Shift+B)。
Android中使用Builder模式的例子
1)系統對話的使用Builder模式
``` public void showDialog() { AlertDialog alertDialog = new AlertDialog.Builder(this) .setTitle("對話框") .setMessage("測試") .setIcon(R.mipmap.ic_launcher) .create(); alertDialog.show(); } ``` 2) ImageLoader使用Builder模式 ``` private void initImageLoader() { ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(getContext()); config.threadPriority(Thread.NORM_PRIORITY - 2); config.denyCacheImageMultipleSizesInMemory(); config.memoryCacheSize(5 * 1024 * 1024);// 5M config.tasksProcessingOrder(QueueProcessingType.LIFO); ImageLoader.getInstance().init(config.build()); } ```
序言這是一篇半技術類文章。眾所周知現在Google主推Android Studio開發工具,而Eclipse已經被閒置一陣子了,但是Eclipse項目卻還有很多沒有遷移到
工具/原料JDKEclipseADTJDK的安裝和Java環境變量的設置1、JDK下載地址 JDK下載地址:http://www.or
本文介紹MediaPlayer的使用。MediaPlayer可以播放音頻和視頻,另外也可以通過VideoView來播放視頻,雖然VideoView比MediaPlayer
限於篇幅的原因,在上篇文章中我們只學習了ActionBar基礎部分的知識,那麼本篇文章我們將接著上一章的內容繼續學習,探究一下ActionBar更加高級的知