七大原則之一 開閉原則(OCP)

2021-09-01 20:45:00 字數 2685 閱讀 5770

在產品的開發過程中,需求變更不足為奇。面對更變的需求基於開閉原則的思想是對程式的改動是通過增加**新**來實現新的需求,而不是更改已經實現就需求的**。因為舊的**可能再別的需求有呼叫,越是底層的類的修改影響別的類就會越多。

開閉原則(the open-closeed principle 簡稱ocp)乙個軟體實體例如類、模組和函式應該對擴充套件操作開放,而對修改操作是關閉的。用抽象構建框架,是實現擴充套件細節。

遵循ocp可以提高我們軟體系統的可維護性、可擴充套件性、可復用性、靈活性;對程式中可能頻繁變更的部分做出抽象。

場景一乙個圖書銷售系統中需要書本的銷售資訊。例如書本的作者、書名、售價(簡單點舉三個屬性);基礎面向介面程式設計的思想將這個獲取書名、作、**折三個功能定義在介面中。實現該介面的方法的不同書本類實現實現具體的業務邏輯即可。

1.介面的定義

package com.mark.design.principle.openclose2;

/** * @description: 定義乙個銷售書本的介面:定義獲取書本作者,書名,**的介面方法

* @author: kingsley

* @createdate: 2018/11/25 18:33

* @version: 2.0

*/public

inte***ce

ibook

介面其中乙個實現類,實際中該介面會很更多的實現類。

package com.mark.design.principle.openclose2;

/** * @description: 書本介面的乙個實現類:《悲傷逆流成河》書本

* @author: kingsley

* @createdate: 2018/11/25 18:38

* @version: 2.0

*/public

class

crymeasadriverbookimpl

implements

ibook

/** * @return :書本的作者名稱

*/public string queryauthor()

/** * @return :書本名稱

*/public string querybookname()

/** * @return :書本的售價

*/public

double

queryprice()

}

模擬客戶端的測試方法

/**

* 需求1:錄入書本《悲傷逆流成河的資訊》,並列印資訊

*/@test

public

void

test1()

執行結果

書名:《悲傷逆流成河》

售價:10.0

場景二

新需求:4月23日讀書日到了;書本《悲傷逆流成河》書本售價打5折。輸出該書本書本的打折後的資訊。

分析:思路一:若在介面ibook介面中新增獲取打折後的**的方法,在實現類中實現方法。這樣雖然可以達到目的,但是。如果當介面有多個實現類的時候,那麼需要在每個實現類中都實現介面方法。

思路二:直接修改crymeasadriverbookimpl中的獲取**方法。這樣也是可以滴,但是。。。如果原本的實現方法如果邏輯複雜,或者存在被其他的業務呼叫的可能,這樣直接修改現有的**是不可取的。

思路三:基於opc思想,通過繼承類crymeasadriverbookimpl達到既可以不修改原本的類也擴充套件了新的功能的目的。**如下:

package com.mark.design.principle.openclose2;

/** * @description: 《悲傷逆流成河》讀書日折後價的計算實現

* @author: kingsley

* @createdate: 2018/11/25 18:54

* @version: 2.0

* 擴充套件業務:計算打折後的**

* 不修改原來的介面和類

* 通過繼承實現

*/public

class

crymeasadriverbookdiscountimpl

extends

crymeasadriverbookimpl

/** * 計算五折後的書本**

* @return :折後價

*/public

double

querydicountprice()

}

模擬客戶端的測試方法

/**

* 新需求:4月23日讀書日到了書本《悲傷逆流成河》書本售價打5折

*/@test

public

void

test2()

執行結果

書名:《悲傷逆流成河》

售價:10.0

折後價:5.0

uml圖

七大原則 開閉原則

開閉原則 open closed principle,ocp 由勃蘭特 梅耶 bertrand meyer 提出,他在 1988 年的著作 物件導向軟體構造 object oriented software construction 中提出 軟體實體應當對擴充套件開放,對修改關閉 software ...

設計模式 七大原則 開閉原則

開閉原則,是程式設計中最基礎 最重要的設計原則。乙個軟體實體如類,模組和函式應對外擴充套件開放 對提供方 對修改關閉 對使用方 用抽象構建框架,用實現擴充套件細節。當軟體需要變化時,盡量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的 來實現變化。說白了就是增加了新功能,盡量保證以前的使用...

設計模式七大原則之開閉原則

簡介 開閉原則是程式設計過程中最基礎 最重要的原則,前面講到的幾個原則,也都是為了實現開閉原則。那麼他是如何開放,又是如何關閉的呢?例項展示 這是乙個用於繪圖的類 使用方 class graphiceditor else if shape.my type 2 else if shape.my typ...