由於手中沒有面向對象的項目,於是決定把大話設計模式用c++寫一遍加深映像!
面向對象的好處:可維護,可擴展,可複用,靈活性好。
原則常記心中:職責單一、開放-封閉、依賴倒轉、迪米特--->(低耦合)
職責單一:多個職責耦合在一起時一個職責變化可能會影響整體,爲了維護更加靈活,儘量讓功能原子化。對一個類而言,應該僅有一個引起它變化的原因。
開放-封閉:類應該可以擴展(開放),但是不可修改(封閉)。
依賴倒轉:針對接口編程,不要對實現編程。把父類都替換成它的子類,程序的行爲沒有變化。
迪米特:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當直接的相互作用。如果其中一個類需要調用另一個類的某一個方法,可以通過第三者轉發這個調用。
工廠方法模式
針對簡單工廠模式中,簡單工廠沒有遵守封閉的原則作出改進。運算類與返回一個運算類的工廠類都做到了 開發-封閉的原則,但是把判斷要返回那個具體運算的操作移動到了客服端
#include<iostream>
#include<stdio.h>
#include <string>
using namespace std;
class Operation{//運算類
protected:
double numberA = 0;
double numberB = 0;
public:
void set_number(double a,double b){
numberA=a;
numberB=b;
}
virtual double GetResult()
{
double result =0;
return result;
}
};
class operationAdd:public Operation{//加法
public:
double GetResult()
{
return numberA+numberB;
}
};
class operationSub:public Operation{//減法
public:
double GetResult()
{
return numberA-numberB;
}
};
class Factory{//工廠方法 返回一個運算類
public:
virtual Operation* createOperation()
{
return NULL;
}
};
class FactoryAdd:public Factory{//返回一個加法類的工廠
public:
Operation* createOperation()
{
return new operationAdd();
}
};
class FactorySub:public Factory{//返回一個減法類的工廠
public:
Operation* createOperation()
{
return new operationSub();
}
};
//客服端代碼
int main()
{
Operation *oper;
Factory *fact=new FactoryAdd();
oper=fact->createOperation();//動態調用
oper->set_number(6,9);
cout<<oper->GetResult();//動態調用
return 0;
}