Android設計模式系列 工廠方法模式

2021-07-04 06:33:55 字數 2277 閱讀 8804

android中用到了太多的工廠類,其中有用工廠方法模式的,當然也有很多任務廠並不是使用工廠方法模式的,只是工具管理類。

ad:

工廠方法模式,往往是設計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發效果的模式。

android中用到了太多的工廠類,其中有用工廠方法模式的,當然也有很多任務廠並不是使用工廠方法模式的,只是工具管理類。

今天以threadfactory舉例說明一下簡單工廠模式和工廠方法模式。 

工廠方法模式,factory method,簡單的方式,不簡單的應用。

1.意圖

定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方式模式使乙個類的例項化延遲到其子類。

熱門詞彙:虛構造器 延遲 建立物件 子類 

2.結構圖和**

我們先看看標準的工廠方法結構圖:

先抽象的產品類,抽象的工廠類,然後用客戶端具體的工廠生產相應的具體的產品,但是客戶端並不知道具體的產品是怎麼生產的,生產的過程封裝在工廠裡。所以說,某種程度上,工廠方法模式改變了我們直接用new建立物件的方式,乙個很好的開始,意義重大。

以threadfactory為例:

這張圖其實和原本的結構圖有細微的區別,那就是引數化得工廠,而且從業務意義上也有些不同,但是思想是一樣的。

我們來看下具體的**:

//抽象產品 

public

inte***ce

runnable   

//抽象工廠 

public

inte***ce

threadfactory   

下面是具體的實現:

比如asynctask類中工廠的具體實現如下:

//工廠實現類 

private

static

final

threadfactory sthreadfactory = 

newthreadfactory()   

};  

//那麼產品類在**呢? 

//做為引數runnable r,我們可以建立千千萬萬個此系列的產品類 

//同理,我們可以建立另外類似的工廠,生產某種專門的執行緒,非常容易擴充套件 

看到這裡,我們一方面為它的生產便利**嘆,一方面又為沒建立某類產品都要建立乙個工廠而感到繁瑣,所以我們下面介紹簡單工廠,它的結構圖如下:

簡單工廠把抽象工廠去掉了,你就建立乙個專門生產某類產品就好。在一些特定而又不負責的領域非常實用方便套用這個模式。

在android中的connection類中使用到了這個類:

其中connection這個抽象類,既充當抽象產品類,也充當具體工廠類。

因為這種情況下,我們往往需要的是馬上生產子類,getconnection方法往往是靜態的,所以簡單工廠,也叫靜態工廠方法。

我們看看**如下:

這就是簡單工廠,乙個很簡單的引數化工廠,真的很簡單。

3.效果

1.建立型模式;

2.引數化工廠方法模式得到相應的物件;

3.為子類提供掛鉤;

4.連線平行的類層次。

4、以下拉重新整理為例

public inte***ce onrefreshlistener

/*** 當實現了此方法 isrefresh=true就是表示可以進行重新整理操作

* @param refreshlistener

*/public void setrefreshlistener(onrefreshlistener refreshlistener)

當我們要實現具體的重新整理功能只需要使用refreshlistview.setrefreshlistener(new onrefreshlistener).

設計模式 工廠系列

簡單工廠 特點 工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,客戶端中避免了和具體產品的依賴。缺點 當要繼續增加運算類時,需要在工廠類中增加相應的邏輯。違背了開放 封閉原則。工廠方法 特點 對每乙個產品都有對應的工廠,當增加新產品 在這裡就是增加運算類 時,只需要增加運算類和...

JAVA系列 設計模式 工廠模式

定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。類圖 這個我們平時接觸的比較多了,直接看 吧。注意要區分和抽象工廠的區別。抽象工廠設計模式 package factory 定義工廠方法所建立的物件的介面。author administrator public inte ce iworkf...

設計模式系列 抽象工廠模式

如圖,factorya專心負責生產producta,factoryb專心負責生產productb,factorya和factoryb之間沒有關係 如果到了後期,如果需要生產productc時,我們則可以建立乙個factoryc工廠類,該類專心負責生產productc類產品。由於factorya fa...