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;
}