買了大神關愛民與何紅輝所著書籍《設計模式解析與實戰》,觀後有所感、有所悟。
先來建立qq空間抽象類:
public
abstract
class
qqspace
/*** 建立空間
*/public
abstract
void
init();
}
接下來分別建立我的空間、朋友空間、陌生人空間的實現類,這裡以我的空間實現類為例,以避免**冗雜:
public
class
myselfspace
extends
qqspace
}
public
abstract
class factory
public
class
tecentfactory
extends
factory
public
static tecentfactory getinstance()}}
return instance;
}@override
public
t createtecentspace(classcls) catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)
return mspace;
}@override
public
t createtecentmusic(classcls) catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)
return mmusic;
}}
測試類和輸出如下:
public
class factorytest
}//輸出結果:建立我自己的空間
當你看過上面**,相信對工廠方法有一定的理解了,當然如果對泛型應用不解,我表示無能為力 了,api應該可以幫助你理解。下面再來看看在android原始碼中的工廠方法模式的實現:
原書中舉例arraylist 和 hashset中的迭代器物件iterator,我就想我不能每次都照著書寫吧,那多沒意思,於是乎我就在原始碼中找到了乙個新的工廠方法模式實戰arrayadapter 和 ******adapter.先來看源**adapter類:
package android.widget;
import android.database.datasetobserver;
import android.view.view;
import android.view.viewgroup;
/** * an adapter object acts as a bridge between an and the
* underlying data for that view. the adapter provides access to the data items.
* the adapter is also responsible for ****** a for
* each item in the data set.
* *@see android.widget.arrayadapter
*@see android.widget.cursoradapter
*@see android.widget.******cursoradapter
*/public
inte***ce
adapter
listadapter繼承adapter新增方法areallitemsenabled()、isenabled(int position):
public inte***ce listadapter extends adapter
baseadapter來實現listadapter並重新相關方法。
public
abstract
class
baseadapter
implements
listadapter, spinneradapter
arrayadapter和******adapter都來繼承抽象類baseadapter,並實現filterable介面
public
class
arrayadapter
extends
baseadapter
implements
filterable
*/public filter getfilter()
return mfilter;
}}
public
class
******adapter
extends
baseadapter
implements
filterable
return mfilter;
}}
private
class
******filter
extends
filter
private
class
arrayfilter
extends
filter
public
abstract
class
filter
public
void
setdelayer(delayer delayer)
}public
final
void
filter(charsequence constraint)
//................略.................
}
控制項listview gridview等列表控制項內部提供方法setadapter(listadapter adapter),使用者在呼叫時可更具介面選擇傳入不同的adapter。
補充:受個人編碼習慣影響,一不小心把抽象工廠模式運用到了這裡,下篇抽象工廠模式就不寫了,這裡做個簡單說明,抽象工廠模式的優點:分離介面與實現,客戶端只需要面向產品程式設計,使其從具體的產品的實現中解耦,使用靈活、簡單。缺點:不容易擴充套件新產品類,
設計模式之工廠方法模式VS簡單工廠方法模式
名詞解釋 簡單工廠 這個實在是沒什麼解釋的,就是乙個工廠類,然後有乙個方法,根據傳遞的引數可以通過switch 你也可以是if,或者是使用高階的反射 來進行物件的建立。工廠方法 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。區別 簡單工廠的優點是工廠類中...
設計模式之簡單工廠 工廠方法模式 抽象工廠模式
這裡講三種模式放在一起說明,是因為三種模式關聯性很強 抽象工廠模式簡單化以後就是工廠方法模式,工廠方法模式再簡單化就是簡單工廠模式 簡單工廠模式並沒有被列入到gof的設計模式中 public class factory 簡單工廠類,實現建立產品物件 class factory return prod...
設計模式 建立型 工廠方法模式 多個工廠方法模式
多個工廠方法模式,屬於工廠方法模式中的一種。它是一種建立型模式。是對普通簡單工廠模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件.public class gunfactory public igun getgunm4a1 ...