開閉原則(open closed principle)
1.基本介紹
2.乙個違反開閉原則的實際案例
要完成乙個畫各種圖形的類。
/*
* 圖形類基類
*/class
shape
/** 矩形類
*/class
rectangle
extends
shape}/*
* 圓形類
*/class
circle
extends
shape}/*
* 畫圖編輯器
*/class
draweditor
else
if(s.type ==2)
}// 畫矩形方法
public
void
drawrectangle
(shape r)
// 畫圓形方法
public
void
drawcircle
(shape r)
}// 使用畫圖
class
do}
以上的**有什麼特點?
當我們新增乙個圖形種類,應該如何增加?
/*
* 新增 三角形類
* 注意,這個三角形類此處就可以理解為提供方,因為後面話畫圖類使用了它,所以對提供方拓展此處並沒有問題
*/class
********
extends
shape}/*
* 修改 畫圖編輯器
*/class
draweditor
else
if(s.type ==2)
else
if(s.type ==3)
}// 新增畫三角形的方法
public
void
draw********
(shape r)
}// 使用畫圖
class
do}
以上**可以看出,當我們新增乙個圖形類時:
3.符合開閉原則的修改
思路:將圖形基類shape做成抽象類,並提供乙個抽象方法draw(),當各種圖形類繼承基類shape時,必須實現抽象方法draw()。這時,我們新增乙個圖形時,只需繼承基類shape並且實現這個圖形的draw()方法即可。
/*
* 圖形類基類,抽象類
*/abstract
class
shape
/** 矩形類
*/class
rectangle
extends
shape}/*
* 圓形類
*/class
circle
extends
shape}/*
* 畫圖編輯器
*/class
draweditor
}// 使用畫圖
class
do}
如果在以上**上新增乙個三角形,就可以看出**滿足了開閉原則了:
/*
* 新增 三角形類
* 注意,這個三角形類此處就可以理解為提供方,因為後面話畫圖類使用了它,所以對提供方拓展此處並沒有問題
*/class
********
extends
shape
}// 使用畫圖
class
do}
這樣當我們新增乙個三角形時: 設計模式之七大原則
學習了這麼長時間的設計模式,我們知道了設計模式是一套被反覆使用 多數人知曉的 經過分類的 設計經驗的總結。使用設計模式是為了 可重用性 讓 更容易被他人理解 保證 可靠性。俗話說 國有國法,家有家規,那在使用設計模式時都需要遵循什麼原則呢?就乙個類而言,應該僅有乙個引起它變化的原因 why如果乙個類...
設計模式之七大原則
對類來說,即乙個類應該只負責乙個職責,如類a負責兩個不同的職責 職責1,職責2 當職責1發生需求變更而改變a時,可能造成職責2執行錯誤,所以需要將類a的粒度分解為a1,a2 com.witty.designpattern.princple.singleresponsibility包 com.witt...
設計模式之設計模式的七大原則
二 設計模式七大原則 軟體設計模式 software design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結,...