Chapter08 工厂方法模式

工厂方法模式简介

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类中。

工厂方法模式在实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端代码。

UML类图

Chapter08 工厂方法模式

 

Chapter08 工厂方法模式

 

 C++代码示例

//MyOperator类 定义操作数和得到结果的接口
#ifndef  _MY_OPERATOR_HPP
#define _MY_OPERATOR_HPP 

class MyOperator{
    public:
    MyOperator(double a, double b):a(a),b(b){

    }
    virtual double getResult(){};

    protected:
    double a;
    double b;
};

#endif
// AddOperator类
#ifndef _ADD_OPERATOR_HPP
#define _ADD_OPERATOR_HPP
#include"myoperator.hpp"
class AddOperator:public MyOperator{
public:
    AddOperator(double a, double b):MyOperator(a,b){

    }
    virtual double getResult() override{
        return a+b;
    }

};

#endif
// SubOperator 类
#ifndef _Sub_OPERATOR_HPP
#define _Sub_OPERATOR_HPP
#include"myoperator.hpp"
class SubOperator:public MyOperator{
public:
    SubOperator(double a, double b):MyOperator(a,b){

    } 
    virtual double getResult() override{
        return a-b;
    }
};
#endif
// MyFactory 类 仅仅一个接口类
#ifndef _Sub_OPERATOR_HPP
#define _Sub_OPERATOR_HPP
#include"myoperator.hpp"
class SubOperator:public MyOperator{
public:
    SubOperator(double a, double b):MyOperator(a,b){

    } 
    virtual double getResult() override{
        return a-b;
    }
};
#endif
//AddFactory 类
#ifndef _ADDFACTORY_HPP
#define _ADDFACTORY_HPP
#include"myfactory.hpp"
#include"myoperator.hpp"
#include"addoperator.hpp"
class AddFactory:public MyFactory{
    public:
    virtual MyOperator* createOperator(double a, double b)override{
        return new AddOperator(a,b); 
    }

};
#endif
//SubFactory 类
#ifndef _SUB_FACTORY_HPP
#define _SUB_FACTORY_HPP
#include"myfactory.hpp"
#include"myoperator.hpp"
#include"suboperator.hpp"
class SubFactory:public MyFactory{
    public:
    virtual MyOperator* createOperator(double a, double b)override{
        return new SubOperator(a, b); 
    }

};
#endif

 

// 客户端程序
#include<iostream>
#include"addfactory.hpp"
#include"subfactory.hpp"
using namespace std;

int main(){

    AddFactory* addFa = new AddFactory();
    MyOperator* myOp = addFa->createOperator(5,3);
    double ans = myOp->getResult(); 
    cout << ans<<endl; // 8

    MyFactory* subFa = new SubFactory();
    MyOperator* subOp = subFa->createOperator(7,1);
    ans = subOp->getResult(); 
    cout << ans << endl; // 6

    getchar();
    return 0;
}

 

原文链接: https://www.cnblogs.com/yb-blogs/p/12509691.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Chapter08 工厂方法模式

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/374092

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月3日 下午12:00
下一篇 2023年3月3日 下午12:00

相关推荐