設計模式解析與實戰之工廠方法模式

2021-07-08 14:35:41 字數 3454 閱讀 5178

買了大神關愛民與何紅輝所著書籍《設計模式解析與實戰》,觀後有所感、有所悟。

先來建立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 ...