閱讀762 返回首頁    go 阿裏雲 go 技術社區[雲棲]


設計模式六大原則--開放-封閉原則

       背景

       剛剛手機連上網,發現又有一大堆可以升級的軟件。怎麼回事?記得剛升級不久啊,難道做一個成熟的APP這麼簡單。聯想到剛剛學習的設計模式,想著這可能是設計模式中的開放-封閉原則在其中起了不小的作用,下麵我們詳細的了解一下什麼是開放-封閉原則(Open-Closed Principle OCP)吧。

       定義

       軟件實體應該可以擴展,但是不可修改(Software entities(classes,modules,functions etc) should open forextension ,but close for modification)。

       詳細說明:

       開發-封閉原則其實是有兩個特征:

       1、對於擴展是開放的(Openfor extension)

       2、對於更改是封閉的(Closedfor modification)

       用途

       我們做任何係統都不要指望係統一開始時需求確定,就再也不發生變化,這是不現實也不科學的,既然係統一定會發生需求的變化,一定會出現修改,那麼我們在設計軟件時就要考慮“怎樣設計才能麵對需求的改變卻可以保持相對穩定,從而使得係統可以在第一個版本以後不斷推出新的版本”。

       一句話總結就是:軟件需求總是變化的,世界上沒有一個軟件的是不變的,因此對軟件設計人員來說,必須在不需要對原有係統進行修改的情況下,實現靈活的係統擴展。

       示例

       下麵是一般麵向對象的方法編寫的簡單計算其中關於運算符類的相關代碼,每次增加新的運算符時必須更改整個類。

public class Operation
    {
        public static double GetResult (double numberA,double numberB,string operate)
        {
            double result = 0d;
            switch(operate)
            {
                case "+":
                    result = numberA + numberB;
                    break;
                case "-":
                    result = numberA - numberB;
                    break;
                case "*":
                    result = numberA * numberB;
                    break;
                case "/":
                    result = numberA / numberB;
                    break;
            }
            return result;
        }
    }

       當我們每次需要增加某一個運算符我們都需要去改變整個類,如果是一個複雜的項目我們無法想象會遇到多麼大的問題。而如果我們運用抽象工廠方法的話,就解決了這個問題(可用如下類圖所示方法)。                       

       優點

       開放-封閉原則是麵向對象設計的核心所在。遵循這個原則可以帶來麵向對象技術所聲稱的巨大好處,也就是可維護、可擴展、可複用、靈活性好。

最後更新:2017-04-03 12:55:04

  上一篇:go Android應用中對於微信分享的實例及問題
  下一篇:go 【入職阿裏】android 幾種開源框架的組合