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
- 2.工厂方法模式
- 2.工厂方法模式
- 2.工厂方法模式
- 2.工厂方法模式
- 2.工厂方法模式
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 2.FactoryMethod-工厂方法模式
- 2.FactoryMethod-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 深入设计模式-2.工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- 每日一题E 2015/6/2 21:50
- 凯云水利水电工程造价系统 (五) 补充定额
- 占位符的另一种用处
- MC 通信协议@2015/06/02
- 黑马程序员——Java基础---语法<一>
- 2.工厂方法模式
- 谱聚类--SpectralClustering
- VMware中Ubuntu 14.04出现Unknown Display问题解决
- Windows 10 预览版 VMware虚拟机 安装教程
- leetcode Reverse Linked List
- 创建MDI窗口
- 7zip 压缩 解压缩
- 哈夫曼树的建立和哈夫曼编码的构造
- 批量删除Xcode中代码的注释