編輯:關於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());
}
```
Android Eclipse 導入 AS Gradle AAR 庫手冊
序言這是一篇半技術類文章。眾所周知現在Google主推Android Studio開發工具,而Eclipse已經被閒置一陣子了,但是Eclipse項目卻還有很多沒有遷移到
Windows下搭建Android開發環境
工具/原料JDKEclipseADTJDK的安裝和Java環境變量的設置1、JDK下載地址 JDK下載地址:http://www.or
21天學習android開發教程之MediaPlayer
本文介紹MediaPlayer的使用。MediaPlayer可以播放音頻和視頻,另外也可以通過VideoView來播放視頻,雖然VideoView比MediaPlayer
Android ActionBar完全解析,使用官方推薦的最佳導航欄(下)
限於篇幅的原因,在上篇文章中我們只學習了ActionBar基礎部分的知識,那麼本篇文章我們將接著上一章的內容繼續學習,探究一下ActionBar更加高級的知