目錄
基本概念
舉乙個例子
在如那就的設計模式中,不能修改,但可以擴充套件的實現是一條十分重要的原則,它是開放-封閉原則(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...
設計模式 開放封閉原則
物件導向設計原則中,最重要的原則就是此原則。開放封閉原則解釋 軟體實體 類,模組,函式等 應該是可以擴充套件的,但是是不可以修改的。開放封閉原則有兩大特徵要牢記 一 對於擴充套件是開放的 二 對於修改是封閉的 為什麼要用到開放封閉原則?我們在做任何系統的時候,都不要指望系統一開始就需求確定,這是不現...
設計模式 開放封閉原則
物件導向設計原則中,最重要的原則就是此原則。開放封閉原則解釋 軟體實體 類,模組,函式等 應該是可以擴充套件的,但是是不可以修改的。開放封閉原則有兩大特徵要牢記 一 對於擴充套件是開放的 二 對於修改是封閉的 為什麼要用到開放封閉原則?我們在做任何系統的時候,都不要指望系統一開始就需求確定,這是不現...