工廠方法模式完全符合設計模式原則, 降低了物件之間的耦合度, 而且, 工廠方法模式依賴於抽象的架構, 將例項化的任務交由了子類實現.
比如你想要出門,每次出行你都要根據天氣情況選擇出行方式,如果下雨天,就開自己的私家車,如果晴天就出門坐公車。那麼這裡可以抽取出乙個基類出來。
//車的基類
public
abstract
class
car
//車的實現類
public
class
bu***tends
car
}public
class
privatecar
extends
car
}//這裡就有兩種方式的選擇,但是具體怎麼選擇要根據情況,如果你在當前類中去選擇判斷,那麼毫無疑問,**會顯得有點冗餘,這時候我們就可以建立乙個工廠類來根據我們具體的情況返回我們想要的類。
public
class
drivefactory
return
null;
}}//使用時,則是
public
class
person
}
可以看到對於呼叫者來說,只關係你呼叫獲取的是什麼,而不關什麼實現。而對於維護擴充套件來說也是非常方便,在工廠方法裡新增乙個實現類就行。當然這裡的抽象可以是介面,也可以使抽象類。
看到工廠大家也就想到了乙個類,那就是bitmapfactory,沒錯,這也是乙個工廠模式
public
class
bitmapfactory
//就不列出來了
而bitmap最終的獲取實現,則是通過這裡底層的native方法
private
static
native bitmap nativedecodestream(inputstream is, byte storage,
rect padding, options opts);
private
static
native bitmap nativedecodefiledescriptor(filedescriptor fd,
rect padding, options opts);
private
static
native bitmap nativedecodeasset(long nativeasset, rect padding, options opts);
private
static
native bitmap nativedecodebytearray(byte data, int offset,
int length, options opts);
private
static
native
boolean
nativeisseekable(filedescriptor fd);
bitmapfactory與前面舉的drivefactory例子,有點不同,當思想都是一樣的,bitmapfactory是根據呼叫方法返回對應的bitmap,返回bitmap區別在於實現方法不同。而drivefactort則是根據多型,根據不同的型別,返回不同的子類。所以,使用時候不要太刻意是否要抽象出基類。思想是活的。 factory工廠模式
1.factory模式 兩個重要的功能 1 定義建立物件的介面,封裝了物件的建立 2 使得具體化類的工作延遲到了子類中。factory模式僅僅侷限於一類類 就是說product是一類,有乙個共同的基類 如果我們要為不同類的類提供 乙個物件建立的介面,那就要用abstractfactory了。我們經常...
Factory 工廠模式
工廠模式有3種。以下的示例 都省略了建構函式與析構函式。一 簡單工廠模式 簡單工廠模式就是只有乙個工廠,所有的產品都有該工廠生產。每一種產品都有乙個對應的type。當需要某種產品時,將該產品的type傳給工廠,然後工廠即會返回該產品。這樣意味著工廠內部必須針對type作判斷,也就是使用乙個switc...
工廠模式(Factory)
工廠模式實現了建立者和呼叫者的分離 工廠模式分類 1.簡單工廠模式 2.工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類 物件導向設計的基本原則 ocp 開閉原則,open closed principle 乙個軟體的實體應當對擴充套件開放,對...