二、工厂方法模式

由于手中没有面向对象的项目,于是决定把大话设计模式用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;
}


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