二、工廠方法模式

由於手中沒有面向對象的項目,於是決定把大話設計模式用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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章