设计模式之(简单工厂类 + 策略模式)

头文件

#pragma once
#include "OperationAdd.h"
#include "OperationDiv.h"
#include "OperationMul.h"
#include "OperationSub.h"

class Context
{
public:
    Context(char cType, double a, double b);
    ~Context();

    double GetResult();

private:
    Operation *pOper;
};

实现文件

#include "pch.h"
#include "Context.h"


Context::Context(char cType, double a, double b)
{
    switch (cType)
    {
    case '+':
        pOper = new OperationAdd();
        break;
    case '-':
        pOper = new OperationSub();
        break;
    case '*':
        pOper = new OperationMul();
        break;
    case '/':
        pOper = new OperationDiv();
        break;
    default:
        break;
    }
    if (pOper)
    {
        pOper->SetNumberA(a);
        pOper->SetNumberB(b);
    }

}


Context::~Context()
{
}

double Context::GetResult()
{
    return pOper->GetResult();
}

测试

#include "pch.h"
#include <iostream>
#include "Context.h"

int main()
{
    Context *pTest = new Context('+', 1.0, 4.5);
    std::cout << pTest->GetResult() << std::endl;
    if (pTest)
    {
        delete pTest;
        pTest = NULL;
    }
    std::cout << "Hello World!\n"; 
}

1.Context实现了两个功能

  • 根据条件的不同生成不同的派生类对象;
  • 通过父类来实现对派生类方法的调用。

2.派生类是独立。

3.对于调用者来说,只需要知道Context及相关的派生类名称就可以。

posted @ 2019-10-17 17:30  N_zero  阅读(266)  评论(0)    收藏  举报