設計模式
是前人對代碼開發經驗的總結,是解決一系列問題的套路。 是一套解決代碼可複用性、可維護性、可讀性、穩健性以及安全性的安全的解決方案。編程
1995年,GoF(Gang of Four)合做出版了《設計模式:可複用面向對象軟件的基礎》一書,共收錄了23種設計模式,今後創建了軟件設計領域的里程碑,江湖人稱[GoF設計模式]。設計模式
這23種設計模式的本質是對面向對象設計原則的運用,是對類的繼承性、封裝性和多態性,以及類的關聯關係和組合關係的充分理解。每個模式描述了一個在咱們周圍重複出現的問題,以及該問題的解決方案的核心,這樣子你就能一次又一次高效地解決問題。安全
軟件工程
是複雜的,而複雜的根原本源是改變。這些改變包含客戶需求的變化
,技術平臺的變化
,開發團隊的變化
,市場環境的變化
。函數
人類解決複雜問題通常有兩種思路:一種是分解,一種是泛化。設計
將複雜問題分解爲一系列能解決的小問題,而後分而治之。code
因爲不能徹底掌握複雜對象的全部細節,所以選擇忽視了它的非本質因素,而去處理泛化和理想化了模型。orm
如上所述,設計模式要解決的問題是程序的複用性、可拓展性、可讀性,其中最重要的就是複用性。對象
即對於不一樣的模塊要實現相同的功能,不該該複製代碼,而是要複用代碼。blog
編程大師Martin Folwer
說過,代碼的壞味道有不少種,而首當其衝的是代碼重複(duplicate code)。繼承
變化是複用的天敵,面向對象設計最大的優點在於:迎合變化。
設計原則比設計模式更重要。全部的設計模式都遵循設計原則,理解設計原則未來咱們本身就能設計出各類各樣的涉及模式。
6大設計原則分別是:
高層模塊(穩定)不該該依賴於底層模塊(變化),而應該依賴於抽象。
抽象(穩定)不該該依賴於具體(變化),具體應該依賴於抽象。
如第一節所說,軟件設計是複雜的,複雜的緣由是開發過程當中的各類變化。雖然軟件開發充滿變化,可是其中仍是有不變的地方,所以就須要把變化的部分和不變的部分進行隔離。
從宏觀上來講,這裏說的變化就是低層模塊,穩定指的是高層模塊。
從語言層面來講,變化指的是具體的類,穩定指的是抽象,如接口、抽象類。
In object-oriented programming, the open/closed principle states "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"; that is, such an entity can allow its behaviour to be extended without modifying its source code.
--- from Wikipedia
在面向對象的編程中,開閉原則說明:軟件實體(模塊,類,函數等)應該對拓展開放,對修改關閉,即:一個實體可以不動他的源代碼進行拓展。
意思就是:要使用拓展的方式來應對的需求的變化。
TIP
這裏指的修改是二進制編譯層面的,意思就是你修改了這個東西須要從新哪些文件才能夠從新使用。
a class should only have one responsibility, which is further defined by Martin as ‘one reason to change
--- from Wikipedia
一個類應該只有一個職責。 這一原則Martin拓展爲: 一個軟件實體應該只有引發他改變的緣由。
Law of Demeter or Least of Knowledge is a design principle for developing software, particular Object-oriented-programs.In its general form, the LoD is a specific case of loose coupling .
迪米特法則(又稱最少知道原則)是一個軟件開發的設計原則,特別是面向對象編程,軟件實體之間應該儘量值暴露須要暴露的。
又稱最少知道原則(Least know principles)。
軟件單元中子類應該能夠替換全部的父類。 即,子類應該具備父類的全部功能。
不該該強迫客戶程序依賴它們不用的方法。接口應該小而完備。
另外還有兩個應該引發注意的點,雖然他們不是設計原則:
在面向對象的設計模式中,能夠按照目的分爲三類:
具體可見以下這腦圖: