工廠模式一共分為三種,簡單工廠、工廠模式和抽象工廠。這三種工廠模式都屬於建立型模式。這篇博文主要講解工廠模式的第一種-簡單工廠模式。
工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅「消費」產品;簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件。
客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。
通過引入配置檔案,可以在不修改任何客戶端**的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
由於工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。
使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。
系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。
簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
支付抽象類
public
abstract
class pay
public
abstract
void
orderpay();
}
支付寶支付類
public
class
alipay
extends
pay
}
public
class
wechatpay
extends
pay
}
銀聯支付類
public
class
unionpay
extends
pay
}
簡單工廠類
choicepay也可以不用靜態,根據具體情況使用
public
class payfactory else
if ("wechatpay".equals(paymethod)) else
if ("unionpay".equals(paymethod))
return pay;
}public
static
void
main(string args) else
}}
具體**見github位址
簡單工廠將物件的例項化抽取出來,可以降低系統的耦合度,使得兩者修改起來都相對容易。在呼叫工廠類的工廠方法時,由於工廠方法是靜態方法,使用起來很方便,可通過類名直接呼叫,而且只需要傳入乙個簡單的引數即可,在實際開發中,還可以在呼叫時將所傳入的引數儲存在xml等格式的配置檔案中,修改引數時無須修改任何源**。
但是這樣不符合開閉原則,如果增加一種支付方式,那麼工廠方法便需要更改,這樣也就對修改也開放了。
jdk中也有許多用到簡單工廠模式的地方 integer.valueof()、dateformat.getdateinstance()等等。。。
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...
設計模式(簡單工廠模式 工廠模式 抽象工廠模式)
當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...
設計模式 簡單工廠設計模式
請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...