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...