工廠方法模式,常常是設計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發效果的模式。
android中用到了太多的工廠類,其中有用工廠方法模式的,固然也有很多工廠其實不是使用工廠方法模式的,只是工具管理類。
今天以ThreadFactory舉例說明1下簡單工廠模式和工廠方法模式。
工廠方法模式,Factory Method,簡單的方式,不簡單的利用。
1.意圖
定義1個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方式模式使1個類的實例化延遲到其子類。
熱門辭匯:虛構造器 延遲 創建對象 子類
2.結構圖和代碼
我們先看看標準的工廠方法結構圖:
先抽象的產品類,抽象的工廠類,然后用客戶端具體的工廠生產相應的具體的產品,但是客戶端其實不知道具體的產品是怎樣生產的,生產的進程封裝在工廠里。所以說,某種程度上,工廠方法模式改變了我們直接用new創建對象的方式,1個很好的開始,意義重大。
以ThreadFactory為例:
這張圖其實和本來的結構圖有細微的區分,那就是參數化得工廠,而且從業務意義上也有些不同,但是思想是1樣的。
我們來看下具體的代碼:
下面是具體的實現:
比如AsyncTask類中工廠的具體實現以下:
看到這里,我們1方面為它的生產便利性感嘆,1方面又為沒創建某類產品都要創建1個工廠而感到繁瑣,所以我們下面介紹簡單工廠,它的結構圖以下:
簡單工廠把抽象工廠去掉了,你就創建1個專門生產某類產品就好。在1些特定而又不負責的領域非常實用方便套用這個模式。
在android中的Connection類中使用到了這個類:
其中Connection這個抽象類,既充當抽象產品類,也充當具體工廠類。
由于這類情況下,我們常常需要的是馬上生產子類,getConnection方法常常是靜態的,所以簡單工廠,也叫靜態工廠方法。
我們看看代碼以下:
這就是簡單工廠,1個很簡單的參數化工廠,真的很簡單。
3.效果
1.創建型模式;
2.參數化工廠方法模式得到相應的對象;
3.為子類提供掛鉤;
4.連接平行的類層次。