1)開閉原則(ocp)是程式設計中最基礎也是最重要的設計原則
2)乙個軟體實體如類,模組和函式應該對擴充套件開放(提供方),對修改關閉(使用方),用抽象構建框架,用實現擴充套件細節。
3)當軟體需要變化時,盡量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的**來實現變化。
4)程式設計中使用其他原則,以及設計模式的目的就是遵循開閉原則。
假設我們需要實現這樣的乙個應用:需要客戶端選擇的幾何圖形種類來畫出相應的圖形。
現在程式提供了畫出矩形和圓形的兩種功能,假設我們還需要新增乙個畫出三角形的功能,**如下
public
static
void
main
(string[
] args)
}//這是乙個用於繪圖的類 [使用方]
class
graphiceditor
//繪製矩形
public
void
drawrectangle
(shape r)
//繪製圓形
public
void
drawcircle
(shape r)
//繪製三角形
//public void draw********(shape r)
}//shape類,基類
class
shape
class
rectangle
extends
shape
}class
circle
extends
shape
//class ******** extends shape
}
注釋掉的**即我們在增加畫三角形這一功能時需要增加的**。
雖然這個**比較好懂,但是會出現這樣的問題:使用端需要使用**的時候竟然需要親自增加一段條件判斷,很顯然這種設計是違反ocp原則的。這樣需要修改的**實在是有點多。
public
class
ocp}
//這是乙個用於繪圖的類 [使用方]
class
graphiceditor
}//shape類,基類
abstract
class
shape
class
rectangle
extends
shape
@override
public
void
draw()
}class
circle
extends
shape
@override
public
void
draw()
}//新增畫三角形
class
********
extends
shape
@override
public
void
draw()
}//新增乙個圖形
class
othergraphic
extends
shape
@override
public
void
draw()
}
我們採用這種繼承的方法,就無需讓使用端來乙個個判斷應當執行的操作,而是採用這種直接的方式,根據傳入的物件型別來執行各自的方法。 設計模式之六原則
單一職責 例子 iphone介面中有三個方法 dial 撥號 chat 通話 hangup 結束通話 由於撥號 和 結束通話 是屬於協議,而通話屬於業務,所以對介面進行拆分 iconnector介面 dial 撥號 hangup 結束通話 idatatransfer介面 chat 通話 總結 對介面...
設計模式 設計模式原則
1 單一職責原則 srp 乙個類應當只有乙個引起其變化的原因。使用單一職責原則的好處有 1 類的複雜性降低 2 可讀性提高 3 可維護性提高 4 變更引起的風險降低 2 黎克特制替換原則 lsp 在使用父類的地方,可以使用其子類替換。黎克特制替換原則的含義 1 子類必須完全實現父類的方法 2 子類可...
設計模式 六大設計原則
剛剛結束設計模式學習時,感覺哪哪的抓不住重點,雖然之前師傅給勾了寫比較重要的設計模式,但是給我的感覺設計模式怎麼全都乙個樣子。通過對一些文章的瀏覽,簡單的對設計原則總結了一下。設計模式,就是設計範例。是經典問題的解決方案,是可以讓學習者舉一反三的,有研究價值 有交流價值的例子。設計模式的本質是物件導...