開放封閉原則

2021-10-20 19:45:49 字數 1290 閱讀 3034

開放-封閉原則(ocp),也叫開-閉原則

軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可修改。

在做任何系統的時候,需求都會改變的,既然需求一定變化,就需要考慮的是如何在面對變化時,設計的軟體可以相對容易修改。

軟體維護的最好辦法就是:多擴充套件,少修改。

說白了,就是在設計初期,就把這個類設計的足夠好,並且不再去修改了。

如果新需求來,增加一些類就完事了,原來的**就盡量不動。

但是,往往絕對的修改是不可能的。

我們可以在發生變化時立刻採取行動,發生一次變化時及時重構**,進而支援後續的需求增長。

case:

之前在做網路層的時候有這麼乙個需求,協議在傳送時失敗或者超時需要重新傳送。

看似很簡單,實現如下:

protocolrequest request;

bool result =

send

(request);if

(!result)

但是某些協議不是那麼重要,不需要重發,比如 ping,那麼就需要進行修改這個方法:

protocolrequest request;

bool result = send(request);

if (!result)

else

}

這樣的話,如果之後還有類似 ping 的協議,還需要繼續修改這個方法。

所以此時就應該想到違反了開-閉原則,立即進行重構。

為基類新增乙個屬性 needresend,在呼叫處直接以此判斷:

class

protocolrequest

public

virtual

bool needresend

}class

pingrequest

:protocolrequest}}

//for test

protocolrequest request;

bool result =

send

(request);if

(!result)

}

總結:

開放-封閉原則是物件導向設計的核心所在,遵循這個原則可以帶來巨大好處:易維護、可擴充套件、可復用和靈活性高。

而且只需對程式中僅需頻繁變化的那些部分作出抽象,如果對於每個部分都刻意做出抽象同樣不是不可取的。

開放 封閉原則

開放 封閉原則 the open closed principle,簡稱ocp 或者叫開 閉原則,意思是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。即對於擴充套件時開放的 open for extension 對於更改是關閉的 closed for modification 這樣...

開放封閉原則

開放封閉原則 開放封閉原則 就是軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。這個原則有兩個特徵,乙個是說對於擴充套件是開放的,另乙個是說對於更改時封閉的。軟實體包括 1 專案或軟體產品中按照一定的邏輯規則劃分的模組。2 抽象和類。3 方法。無論模組是多麼的封閉,都會存在一些無法對之...

開放封閉原則

開放封閉原則對於擴充套件是開放的,對於修改是封閉的。所謂開放封閉原則就是軟體實體應該對外擴充套件開發,而對修改封閉。開放封閉原則是所有物件導向原則的核心,軟體設計本身所追求的目標就是封裝變化,降低耦合,而開放封閉原則正是對這一目標最直接的體現。例如之前部落格的計算程式中,起初如果我們想要乙個加法的程...