赞
踩
目录
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让字类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;
简单工厂模式的最大优点在用户工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖。
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂内部逻辑判断移到了客户端代码来进行。
UML图如下(这里以计算器为例)
程序运行截图如下:
源码如下:
Head.h
- #ifndef HEAD_H
- #define HEAD_H
-
-
- //运算相关
- class Operation{
-
- public:
- double m_numberA;
- double m_numberB;
- virtual double getResult();
- };
-
- class AddOperation: public Operation{
-
- public:
- AddOperation();
- double getResult();
- };
-
- class MultiOperation: public Operation{
-
- public:
- MultiOperation();
- double getResult();
- };
-
- //工厂相关
-
- class IFactory{
-
- public:
- virtual Operation *createOperation();
- };
-
- class AddFactory: public IFactory{
-
- public:
- Operation *createOperation();
- };
-
- class MultiFactory: public IFactory{
-
- public:
- Operation *createOperation();
- };
-
-
- #endif //HEAD_H
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Head.cpp
- #include "Head.h"
- #include <iostream>
- #include <string>
- using namespace std;
-
- Operation *IFactory::createOperation()
- {
- return nullptr;
- }
-
- Operation *AddFactory::createOperation()
- {
- return new AddOperation;
- }
-
- double Operation::getResult()
- {
- return -1;
- }
-
- AddOperation::AddOperation()
- {
- m_numberA = 0.0;
- m_numberB = 0.0;
- }
-
- double AddOperation::getResult()
- {
- return m_numberA + m_numberB;
- }
-
- MultiOperation::MultiOperation()
- {
- m_numberA = 0.0;
- m_numberB = 0.0;
- }
-
- double MultiOperation::getResult()
- {
- return m_numberA * m_numberB;
- }
-
- Operation * MultiFactory::createOperation()
- {
- return new MultiOperation;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
main.cpp
- #include "Head.h"
- #include <iostream>
- using namespace std;
-
- int main(int *argc, int *argv){
-
- IFactory *operAddFactory = new AddFactory;
- Operation *addOper = operAddFactory->createOperation();
- addOper->m_numberA = 100;
- addOper->m_numberB = 200;
- cout << "operAddFactory result is : " << addOper->getResult() << endl;
- delete operAddFactory;
- delete addOper;
-
- cout << "--------------- 华丽的分割线 ---------------" << endl;
- IFactory *operMultiFactory = new MultiFactory;
- Operation *multiOper = operMultiFactory->createOperation();
- multiOper->m_numberA = 12;
- multiOper->m_numberB = 5;
- cout << "operMultiFactory result is : " << multiOper->getResult() << endl;
- delete operMultiFactory;
- delete multiOper;
-
- getchar();
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。