設計模式 6 設計模式的七大原則之五 開閉原則

2021-10-04 02:00:43 字數 1863 閱讀 5483

開閉原則(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 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結,...