C 設計模式 開放 封閉原則基本概念與例項

2021-09-02 22:20:47 字數 3291 閱讀 8379

目錄

基本概念

舉乙個例子

在如那就的設計模式中,不能修改,但可以擴充套件的實現是一條十分重要的原則,它是開放-封閉原則(the open-clossed principle,簡稱ocp)或開-關閉原則;

開放-封閉原則,軟體實體(類、模組、函式等)應該可以擴充套件,但不能修改。【asd】

對於擴充套件是開放的(open for extension),對於更改是封閉的(closed for modification)【asd】

【注意】不要指望在系統一開始時需求確定,就不會變化了,這是不科學的想法,,既然需求是會變化的,那麼如何在面對需求變化時,設計軟體可以相對容易的修改,不至於新系統一來,老系統推倒。

設計軟體時,要時時刻刻的考慮,盡量讓這個類足夠好,寫好就不要去修改了,但新需求來了,增加一些類就完事了,原理的**則不能動。

無論模板是多麼的封閉,都會存在一些無法對之封閉的變化。既然不能完全封閉,設計人員必須對於他設計的模組應該對哪些變化封閉做出選擇。他必須先猜出最有可能傳送變化的種類,然後構造抽象來隔離那些變化【asd】

在最初寫**的時候,假設變化不會發生。當變化發生時,我們建立抽象來隔離以後傳送的同類變化【asd】。

【總結】

開放-封閉原則是物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所宣告的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發人員應該僅對程式中呈現出頻繁變化的哪些部分做出抽象,然而,對於應用程式中每個部分都刻意的進行抽象同樣不是乙個好主意。拒絕不成熟的抽象和抽象本身一樣重要【asd】。

做乙個計算器啥的!

目錄結構如下:

uml圖如下:

程式執行截圖如下:

原始碼如下:

operation.h

#ifndef operation_h

#define operation_h

class operation

;#endif // operation_h

operationfactory.h

#ifndef operationfactory_h

#define operationfactory_h

#include "otheroperation.h"

#include class operationfactory

else if(operate == "-")

else if(operate == "*")

else if(operate == "/")

else

return oper;

}};#endif // operationfactory_h

otheroperation.h

#ifndef otheroperation_h

#define otheroperation_h

#include class operationadd: public operation;

class operationsub: public operation;

class operationmul: public operation;

class operationdiv: public operation;

#endif // otheroperation_h

widget.h

#ifndef widget_h

#define widget_h

#include namespace ui

class widget : public qwidget

;#endif // widget_h

main.cpp

#include "widget.h"

operation.cpp

#include "operation.h"

#include operation::operation()

operation::~operation()

double operation::getnumbera() const

void operation::setnumbera(const double number)

double operation::getnumberb() const

void operation::setnumberb(const double number)

double operation::getresult()

otheroperation.cpp

#include "otheroperation.h"

#include double operationadd::getresult()

operationadd::~operationadd()

double operationsub::getresult()

operationsub::~operationsub()

double operationmul::getresult()

operationmul::~operationmul()

double operationdiv::getresult()

operationdiv::~operationdiv()

widget.cpp

#include "widget.h"

#include "ui_widget.h"

#include "operationfactory.h"

#include widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::btnclicked()

catch(const char *err)

if(oper != null)

}

設計模式原則 開放 封閉原則

定義 軟體實體應該是可以擴充套件,但是不可修改,對擴充套件開放,對更改封閉 場景 某公司需要招聘3類員工,分別是 主管,程式設計師,銷售。公司根據不同的員工的需求,配置不同的資源。比如程式設計師應該配台電腦。首先定義乙個 員工型別 列舉 using system using system.colle...

設計模式 開放封閉原則

物件導向設計原則中,最重要的原則就是此原則。開放封閉原則解釋 軟體實體 類,模組,函式等 應該是可以擴充套件的,但是是不可以修改的。開放封閉原則有兩大特徵要牢記 一 對於擴充套件是開放的 二 對於修改是封閉的 為什麼要用到開放封閉原則?我們在做任何系統的時候,都不要指望系統一開始就需求確定,這是不現...

設計模式 開放封閉原則

物件導向設計原則中,最重要的原則就是此原則。開放封閉原則解釋 軟體實體 類,模組,函式等 應該是可以擴充套件的,但是是不可以修改的。開放封閉原則有兩大特徵要牢記 一 對於擴充套件是開放的 二 對於修改是封閉的 為什麼要用到開放封閉原則?我們在做任何系統的時候,都不要指望系統一開始就需求確定,這是不現...