介面是用來封裝隔離具體的實現的,目標就是不要讓客戶端知道封裝體內部的具體實現。
簡單工廠的位置是位於封裝體內的,所以簡單工廠知道具體類的實現是沒有關係的。
對於客戶端來說,只是知道了介面和簡單工廠。
優點:工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
缺點:當產品有複雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。同時,系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於複雜。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。
應用場景:
如果想要完全封裝隔離具體實現,讓外部只能通過介面來操作封裝體,則可以選用簡單工廠。客戶端通過工廠來獲取相應的介面,而無需關心具體的實現。
如果想要把對外建立物件的職責集中管理和控制,可以選用簡單工廠。
例(計算器):
/// /// 數字b
///
public double numberb
set}
/// /// 得到運算結果
///
///
public virtual double getresult()
}/// /// 加法類
///
class operationadd : operation
}/// /// 減法類
///
class operationsub : operation
}/// /// 乘法類
///
class operationmul : operation
}/// /// 除法類
///
class operationdiv : operation
}/// /// 平方類
///
class operationsqr : operation
}/// /// 平方根類
///
class operationsqrt : operation
}/// /// 相反數類
///
class operationreverse : operation
}/// /// 運算類工廠
///
class operationfactory
case "-":
case "*":
case "/":
case "sqr":
case "sqrt":
case "+/-":
}return oper;}}
}
using system;
using system.collections.generic;
using system.text;
using operationlibrary;
namespace 計算器控制台
catch (exception ex)}}
}
例(商場**)(**略):
當我們涉及到商場**此類程式時,發現簡單工廠模式可以解決正常收費,打折收費,返利收費等業務,甚至可以新增擴充套件達到一定積分領獎品等業務,但是簡單工廠模式只是解決物件的建立問題。而且由於工廠本身包括了所有的收費方式,商場是可能是經常性更改打折額度和返利額度,每次維護和擴充套件收費方式都要改動這個工廠,以致**需要重新編譯部署,真的是很糟糕的處理方式,因此它不是最好的處理辦法,面對演算法的時常變動,應該採用更好的解決辦法(策略模式)
1 簡單工廠模式
工廠類61 到底要例項化誰,將來會不會增加例項化的物件,比如增加開跟運算,這是很容易變化的地方,62 應該考慮用乙個單獨的類來做這個創造例項的過程,這就是工廠 63template class t 64class operationfactory 6574 else if operate 75 78...
1 簡單工廠模式
一 做乙個商場收銀軟體 二 code using system namespace web.策略模式 正常收費子類 class cashnoraml cashsuper 打折收費子類 public class cashrebate cashsuper 返回折扣 原價 public override ...
1 簡單工廠模式
簡單工廠模式 factory pattern 又稱為靜態工廠方法 static factory method 模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。當我們需要使用乙個物件時,...