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...