設計模式 -- 策略模式和簡單工廠實現計算器

設計模式 -- 策略模式和簡單工廠的結合
#####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);
        }

GITHUB地址:https://github.com/hezudao25/StrategyPattern

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章