設計模式 之 概述


    設計模式的概念最早是由一名建築師提出來的,他試圖在圖紙上用一種結構化、可重用化的方法,獲得建築的基本要素,從而可以將更多的精力放在具體建築物和城鎮的設計上。逐漸的,這種思想在軟件領域流行起來,並獲得發展。

    設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

    設計模式是計算機軟件領域比較抽象的內容,設計模式帶給我們的是:使我們從復雜、煩亂的代碼中解脫出來,讓軟件系統變得更加穩定、更加易於擴展,維護更加輕松。


為什么需要設計模式


    設計模式的應用,無論對個人、企業、還是社會都有百利而無一害的。首先,它可以提升個人的編程能力、思維能力和設計能力,極大提高工作效率,讓個人獲得更大發展空間;其次,對於企業,應用設計模式可使軟件產品質量得到保證,系統穩定性大大提升,為企業創造出更多的利潤上升空間;最后,個人和企業都在不斷地發展壯大,自然會創造出更多的社會價值,為社會作出更多的貢獻。因此,我們需要設計模式、企業需要設計模式、社會也需要設計模式。設計模式或將成為改變一個人職場命運、一個企業成敗關鍵、甚至一個社會 經濟發展的重要因素。





軟件設計遵循的基本原則

1、單一職責原則(Single Responsibility Principle,簡稱SRP)
      單一職責原則,就一個類而言,應該僅有一個引起它變化的原因。如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會消弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。而軟件設計真正要做的許多內容,就是發現職責,並把這些職責相互分離。

2、 開放--封閉原則(The Open-Closed Principle,簡稱OCP)
       開放--封閉原則,是說軟件實體(類、模塊、函數等等)應該可以擴展,但是不可以修改。即對於擴展是開放的,對於更改是封閉的。 我們不可能做到未卜先知,在設計的時候盡可能讓一個類足夠好,設計好了就不要去修改了;不能完全封閉的情況下,當發生變化時,我們就創建抽象來隔離以后發生的同類變化。

3、依賴倒轉原則(Dependence Inversion Principle )
      依賴倒轉原則,指高層模塊不應該依賴低層模塊,兩個都應該依賴抽象;抽象不應該依賴細節,細節應該依賴抽象。說白了就是要針對接口編程,不要對實現編程。舉個例子:計算機硬件中,如果內存壞了,那么只需要換一個內存條就可以了,而不需要去換一個主板,在這里內存是一個接口類,只要符合他的規格要求就行,無論是那一根。

4、里氏代換原則(Liskov Substitution Principle,簡稱LSP)
     里氏代換原則,子類型必須能夠替換掉他們的父類型。在軟件里面,把父類都替換成其子類,程序的行為不會發生變化。正是由於子類型的可替換性才使得使用父類型的模塊在無需修改的情況下就可以擴展。

5、迪米特法則(Law of Demeter)
      迪米特法則,如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法時,可以通過第三者轉發這個調用。類之間的耦合越弱,就越有利於復用,一個處在弱耦合的類被修改,不會對有關系的類造成波及。 主要是強調了類之間的松耦合。

6、合成/聚合復用原則(Composition/Aggregation Principle],簡稱CARP)
     合成聚合復用原則,盡量使用合成/聚合,盡量不使用類繼承。合成聚合是“has  a”的關系,而繼承是“is  a”的關系。由於繼承是一中強耦合的結構,父類變,子類必變。所以不是“is  a”關系,我們一般不要用繼承。優先使用合成聚合復用原則,有助於保持每個類的封裝,降低繼承的層次。




設計模式的分類


按照范圍來分,設計模式可以分為類模式和對象模式。


    類模式用來處理類和子類之間的關系,這些關系通過幾成建立,是靜態的,在編譯時刻便確定下來;

    對象模式是處理對象間的關系,這些關系在運行時是可以變化的,更具動態性。


按照目的來分,設計模式可以分為創建型模式、結構型模式和行為型模式。


    創建型模式用來處理對象的創建過程;

    包括工廠方法(Factory Method)

        抽象工廠(Abstract Factory)

        建造者(Builder)

        原型(Prototype)

        單例(Singleton)

    結構型模式用來處理類或者對象的組合;

    包括適配器(Adapter)

        橋接(Bridge)

        組合(Composite)

        裝飾者(Decorator)

        外觀(Facade)

        享元(Flyweight)

        代理(Proxy)

    行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述。

    包括責任鏈(Chain of Responsibility)

        命令(Command)

        解釋器(Interpreter)

        迭代器(Iterator Pattern)

        中介者(Mediator)

        備忘錄(Memento)

        觀察者(Observer)

        狀態(State)

        策略(Strategy)

        模板方法(Template Method)

        訪問者(Visitor)





    設計模式是前人實踐經驗的總結,是經過千錘百煉的思想結晶。我們學習設計模式不是真正的目的,我們真正的目的是學習這種思想,並在實踐當中具體應用,並且學會歸納和總結,讓我們的思維活躍起來,不再拘泥於計算機編碼,而是上升到一定的理論空間。讓理論指導實踐,實踐充實理論,這樣就會形成一種良性循環,不斷提升自己的理論、實踐能力,從而實現個人最大的社會價值。






















注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



設計模式概述 設計模式(0)—— 概述 設計模式概述 設計模式概述 設計模式概述 設計模式概述 【設計模式】概述 設計模式概述 設計模式——設計模式概述 概述:3種設計模式
 
粤ICP备14056181号  © 2014-2021 ITdaan.com