2.工厂方法模式

1.说明
请参见《简单工厂模式》,此处略。
2.工厂方法模式说明
工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类,使得类的实例化延迟到其子类。
3.与简单工厂模式比较
1.简单工厂模式可以根据传入条件生成多个产品,而工厂方法模式每个工厂只生产一个产品,所以需要多个工厂。
2.简单工厂是根据条件来判断并生成产品,而工厂方法模式是直接初始化不同的工厂,由不同的工厂生成不同的产品,省略了判断环节。
简单工厂优缺点:相较于简单工厂模式,开放封闭原则做的更好,但是如果有很多产品时,会涉及到大量的类,开发量增加
4.UML

5.代码

 #ifndef __ALGBASE_H
#define __ALGBASE_H

#include <iostream>

class CAlgBase
{
    public:
    CAlgBase(){}
    virtual ~CAlgBase(){}
    virtual int alg_operate(int x, int y) = 0;
};

#endif

#ifndef __ADDOPP_H
#define __ADDOPP_H

#include "AlgBase.h"

class CAddopp:public CAlgBase
{
public:
    virtual int alg_operate(int x, int y)
    {
        return x+y;
    }
};
#endif

#ifndef __MAXOPP_H
#define __MAXOPP_H
#include "AlgBase.h"

class CMaxopp:public CAlgBase
{
public:
    virtual int alg_operate(int x, int y)
    {
        int ret = x;
        if (ret < y)
            ret = y;
        return ret;
    }
};

#endif
#ifndef __MINOPP_H
#define __MINOPP_H

#include "AlgBase.h"

class CMinopp:public CAlgBase
{
public:
    virtual int alg_operate(int x, int y)
    {
        int ret = y;
        if (ret > y)
            ret = y;
        return ret;
    }
};

#endif

#ifndef __FACTORINTER_H
#define __FACTORINTER_H

#include <iostream>
#include "AlgBase.h"

class CFactorInter
{
public:
    virtual CAlgBase* create_opp() = 0;
};
#endif

#ifndef __ADDFACTOR_H
#define __ADDFACTOR_H

#include "FactorInter.h"
#include "Addopp.h"

class CAddFactor:public CFactorInter
{
public:
    CAlgBase* create_opp()
    {
        return new CAddopp();
    }
};


#endif

#ifndef __MAXFACTOR_H
#define __MAXFACTOR_H

#include "FactorInter.h"
#include "Maxopp.h"
class CMaxFactor:public CFactorInter
{
public:
    CAlgBase* create_opp()
    {
        return new CMaxopp();
    }

};
#endif

#ifndef __MINFACTOR_H
#define __MINFACTOR_H

#include "FactorInter.h"
#include "Minopp.h"

class CMinFactor:public CFactorInter
{
public:
    CAlgBase* create_opp()
    {
        return new CMinopp();
    }
};

#endif


#include <iostream>
#include "FactorInter.h"
#include "MaxFactor.h"
#include "MinFactor.h"
#include "AddFactor.h"


//@notice: 工厂是不是用静态类要好一些类,在多处创建的时候,就需要创建多个工厂
//         工厂是不是应该也有申请的销毁,数据管理等方法

int main(void)
{
    CFactorInter* maxfact = new CMaxFactor();
    CAlgBase* maxopp = maxfact->create_opp();
    std::cout<<"max num:"<<maxopp->alg_operate(10, 5)<<" in 10 and 5."<<std::endl;

    CFactorInter* minfact = new CMinFactor();
    CAlgBase* minopp = minfact->create_opp();
    std::cout<<"min num:"<<minopp->alg_operate(10, 5)<<" in 10 and 5."<<std::endl;

    CFactorInter* addfact = new CAddFactor();
    CAlgBase* addopp = addfact->create_opp();
    std::cout<<"add num:"<<addopp->alg_operate(10, 5)<<" in 10 and 5."<<std::endl;

    delete maxfact;
    delete maxopp;
    delete minfact;
    delete minopp;
    delete addfact;
    delete addopp;
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值