大话设计模式--工厂方法模式 Factory Method -- C++实现
2013-10-09 09:06
603 查看
1. 工厂方法模式
定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
和简单工厂模式相比:
A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, 根据客户端的选择条件动态实例化相关的类,对客户端来说去除了与具体产品的依赖。
但缺点是 添加新产品时 需要修改工厂类 case, 违背了 "开放-封闭" 原则。
B: 工厂方法模式实现时,需要由客户端来决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,只是由工厂类内部转移到客户端。
实例:
operation.h -- operation.cpp
operationfunc.h operationfunc.cpp
factory.h factory.cpp 抽象工厂
addfactory.h addfactory.cpp
subfactory.h subfactory.cpp
main.cpp
定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
和简单工厂模式相比:
A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, 根据客户端的选择条件动态实例化相关的类,对客户端来说去除了与具体产品的依赖。
但缺点是 添加新产品时 需要修改工厂类 case, 违背了 "开放-封闭" 原则。
B: 工厂方法模式实现时,需要由客户端来决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,只是由工厂类内部转移到客户端。
实例:
operation.h -- operation.cpp
#ifndef OPERATION_H #define OPERATION_H class 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 -- C++实现实例
- C++实现Creational - Factory Method模式
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 大话设计模式八:工厂方法模式(factory method)
- 设计模式实现(五)--- 工厂方法模式(Factory Method)
- 大话设计模式c++实现1——简单工厂模式 Simple Factory Pattern
- 大话设计模式C++实现-第8章-工厂方法模式
- C++设计模式之工厂方法模式(Factory Method)
- 大话设计模式8 c++实现——工厂方法模式
- 设计模式之—工厂方法模式(FactoryMethod)-Java实现
- 读《大话设计模式》---工厂方法模式(factory method)
- (Factory Method)工厂方法模式的Java实现
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 大话设计模式C++实现-第8章-工厂方法模式
- (Factory Method)工厂方法模式的Java实现
- (Factory Method)工厂方法模式的Java实现
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- (C++实现)——工厂方法模式(Factory Method Pattern)
- 设计模式 - 简单工厂模式/静态工厂模式(Static Factory Method) C++实现