大话设计模式--工厂方法模式 Factory Method -- C++实现
来源:互联网 发布:linux aria2 编辑:程序博客网 时间:2024/06/09 22:42
1. 工厂方法模式
定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
和简单工厂模式相比:
A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, 根据客户端的选择条件动态实例化相关的类,对客户端来说去除了与具体产品的依赖。
但缺点是 添加新产品时 需要修改工厂类 case, 违背了 "开放-封闭" 原则。
B: 工厂方法模式实现时,需要由客户端来决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,只是由工厂类内部转移到客户端。
实例:
operation.h -- operation.cpp
#ifndef OPERATION_H#define OPERATION_Hclass Operation{public: Operation(); double virtual getResult(); double strA; double strB; double result;};#endif // OPERATION_H
#include "operation.h"Operation::Operation(){ strA = 0; strB = 0; result = 0;}double Operation::getResult(){ return result;}
operationfunc.h operationfunc.cpp
#ifndef OPERATIONFUNC_H#define OPERATIONFUNC_H#include "operation.h"class OperationAdd : public Operation{public: double getResult();};class OperationSub : public Operation{public: double getResult();};class OperationMul : public Operation{public: double getResult();};class OperationDiv : public Operation{public: double getResult();};
#include "operationfunc.h"double OperationAdd::getResult(){ result = strA + strB; return result;}double OperationSub::getResult(){ result = strA - strB; return result;}double OperationMul::getResult(){ result = strA * strB; return result;}double OperationDiv::getResult(){ result = strA / strB; return result;}
factory.h factory.cpp 抽象工厂
#ifndef FACTORY_H#define FACTORY_H#include "operation.h"#include "operationfunc.h"#include <string>using namespace std;class Factory{public: Factory(); virtual Operation* createOperation();};#endif // FACTORY_H
#include "factory.h"Factory::Factory(){}Operation* Factory::createOperation(){}
addfactory.h addfactory.cpp
#ifndef ADDFACTORY_H#define ADDFACTORY_H#include "factory.h"class AddFactory : public Factory{public: AddFactory(); Operation* createOperation();};#endif // ADDFACTORY_H
#include "addfactory.h"AddFactory::AddFactory(){}Operation* AddFactory::createOperation(){ return new OperationAdd();}
subfactory.h subfactory.cpp
#ifndef SUBFACTORY_H#define SUBFACTORY_H#include "factory.h"class SubFactory : public Factory{public: SubFactory(); Operation* createOperation();};#endif // SUBFACTORY_H
#include "subfactory.h"SubFactory::SubFactory(){}Operation* SubFactory::createOperation(){ return new OperationSub();}
main.cpp
#include <iostream>#include "operationfunc.h"#include "addfactory.h"#include "subfactory.h"using namespace std;int main(){ cout << "Factory method " << endl; Factory *factory = new SubFactory(); Operation *oper = factory->createOperation(); oper->strA = 1.1; oper->strB = 2.3; cout << "result: " << oper->getResult() << endl; return 0;}
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
- 大话设计模式八:工厂方法模式(factory method)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- 设计模式C++(Factory Method工厂方法模式)
- 设计模式-工厂方法模式(factory method)
- 设计模式-工厂方法模式(Factory Method)
- 【设计模式】-工厂方法模式-Factory Method
- 设计模式 工厂方法模式 factory method
- 设计模式 工厂方法模式 Factory Method
- 读《大话设计模式》---工厂方法模式(factory method)
- 《大话设计模式》--雷锋依然在人间--工厂方法模式<Factory Method>(8)
- 设计模式 - 工厂方法(Factory Method) C++实现
- 设计模式(1)-工厂方法(Factory Method)
- 【初学设计模式】Factory Method (工厂方法)
- 设计模式学习-Factory Method(工厂方法)
- 设计模式-工厂方法(Factory Method)
- factory method(工厂方法设计模式)
- 【设计模式】之 Factory Method 工厂方法
- Android 游戏设计教程
- Linux字符设备驱动
- springMVC学习笔记之入门案例
- squid对请求的处理流程
- 总结C#获取当前路径的7种方法
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
- 英语字根
- IOS如何判断越狱
- arduino-舵机控制(示例)
- wince5。0平台搭建
- 流数据挖掘
- 服装模版软件的开发
- 自旋锁
- ARM裸机程序开发14(JTAG与RealViewMDK搭建ARM开发环境)