設計模式 -- 策略模式和簡單工廠的結合
#####1 策略模式(Strategy)介紹和優缺點
#####2 策略模式和簡單工廠的結合
#####3 策略模式的應用
設計模式:面嚮對象語言開發過程中,對各種問題和場景的解決方案的沉澱, 是解決問題的套路, 提出場景--解決問題--總結沉澱--推廣應用
行爲型設計模式:關注對象和行爲的分離
設計模式都是爲了解決一類問題而存在的,往往在解決一類問題的同時會帶來的新的問題,會有對應的解決方案。設計模式不是萬能的
程序設計:不關係功能性,關注的非功能性的要求,程序的擴展性--可讀性--健壯性
策略模式已經完成了!
策略模式應對業務處理中,會有多種相似處理方式(算法),然後封裝成算法+抽象,此外,調用環節也有擴展要求的,來個context
好處:算法封裝,有抽象可以擴展; 調用環節轉移,可以擴展;
缺陷:上端必須知道全部算法,而且知道映射關係
最終我們會解決問題,但是這個不屬於策略模式
//3 轉移了算法創建以及映射關係,封裝了一下
//iCaculation = Factory.GetCaculation(operate);
iCaculation = Factory.GetCaculationReflection(operate);
//1 轉移了算法邏輯
//iResult = iCaculation.Caculation(iInputLeft, iInputLeft);
CaculationContext context = new CaculationContext(iCaculation, iInputLeft, iInputRight);
//2 轉移了算法的調用邏輯
iResult = context.Action();
擴展性---抽象---反射---動態
/// <summary>
/// 不僅把對象創建給屏蔽了,而且映射關係也可以配置文件決定了
/// </summary>
/// <param name="operate"></param>
/// <returns></returns>
public static ICaculation GetCaculationReflection(string operate)
{
string key = $"ICaculation{operate}";
string dllType = ConfigurationManager.AppSettings[key];
Assembly assembly = Assembly.Load(dllType.Split(',')[1]);
Type type = assembly.GetType(dllType.Split(',')[0]);
return (ICaculation)Activator.CreateInstance(type);
}