2.工厂方法模式

来源:互联网 发布:淘宝全屏导航不固定 编辑:程序博客网 时间:2024/06/06 03:03

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;}
0 0
原创粉丝点击