設計模式 開閉原則介紹

2021-10-19 19:43:58 字數 2183 閱讀 1341

1)開閉原則是變成最基礎,最重要設計原則

2)乙個軟體實體,如類模組和函式應該對擴充套件開放(對程式設計師方),對修改關閉(對使用方)。用抽象構建框架,用實現擴充套件細節

3)軟體需要修改時,盡量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的**來實現變化。

4)程式設計中遵頊其他原則,以及使用設計模式的目的就是遵循開閉原則。

方案一

public

class

ocp1

}/**

* 繪製乙個圖形

*/class

graphiceditor

if(shap.m_type ==2)

}public

void

drawrectangle()

public

void

drawcircle()

}/**

* 基類shap

*/class

shap

/** * 繼承shap,使用type = 1

*/class

rectangle

extends

shap

}/**

* 繼承shap,使用不同的type = 2

*/class

circle

extends

shap

}

1)簡單易操,理解簡單

2)違反了開閉原則,即對擴充套件開放(對程式設計師方),對修改關閉(對使用方)

3)我們需要增加乙個會組織三角形時,需要修改很多地方 => 方案二

方案二

public

class

ocp1

}/**

* 繪製乙個圖形【使用方新增方法,和進行了修改】

* 違背了開閉原則

* 改進 : 把基類shap做成抽象類,提供乙個draw方法,讓子類去實現即可,使用方的**不需要修改,滿足開閉原則

* 解決 : 方案三

*/class

graphiceditor

if(shap.m_type ==2)

// type = 3繪製三角形

if(shap.m_type ==3)

}public

void

drawrectangle()

public

void

drawcircle()

//繪製三角形

public

void

draw********()

}/**

* 基類shap

*/class

shap

/** * 繼承shap,使用type = 1

*/class

rectangle

extends

shap

}/**

* 繼承shap,使用不同的type = 2

*/class

circle

extends

shap

}/**

* 新增三角形,繼承shap,使用不同的type = 3

*/class

********

extends

shap

}

方案三

public

class

ocp2

}/**

* 新增圖形不需修改使用方

*/class

graphiceditor

}/**

* 基類shap

*/abstract

class

shap

/** * 繼承shap,實現抽象方法

*/class

rectangle

extends

shap

}/**

* 繼承shap,實現抽象方法

*/class

circle

extends

shap

}/**

* 新增三角形,繼承shap,實現抽象方法

* 擴充套件開放

*/class

********

extends

shap

}

設計模式 開閉原則

開閉原則的核心是 對擴充套件開放,對修改關閉 白話意思就是我們改變乙個軟體時 比如擴充套件其他功能 應該通過擴充套件的方式來達到軟體的改變,而不應愛修改原有 來實現變化 軟體系統中包含的各種元件,例如模組 modules 類 classes 以及功能 functions 等等,應該在不修改現有 的基...

設計模式 開閉原則

設計模式 開閉原則 即 對立與統一原則 軟體實體應該對擴充套件開放,對修改關閉,即實體應當通過擴充套件實現變化,而不是修改 實現變化 什麼是軟體實體,專案或軟體中按照一定邏輯規劃劃分的模組 抽象 類 方法書店銷售書籍 然後書寫 如下 書籍介面 public inte ce ibook 書店 類書籍,...

設計模式 開閉原則

ocp原則 開閉原則 1 對外能擴充套件 提供方 2 對修改關閉 使用方 下面這段 實現了繪製形狀的功能,如果設計如下 package ocp author lihaiyu date 2020 11 8 20 50 public class ocp 這是乙個用於繪製圖形的類,使用方 class gr...