策略模式

作用:策略模式定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到客户的使用。
策略模式就是用来封装算法的,但是在实践中我们发现,可以用他来封装任何类型的规则,只要在分析过程中听到在不同的时间应用不同的业务规则,就可以考虑使用策略模式来应对这种变化。

这里将算法的抽象接口封装在一个类中(Context),再通过委托的方式将具体的算法实现交给Strategy类
Strategy定义了所支持的算法的公共接口。
ConcreteStrategy定义了具体的实现。


代码实现:
//Strategy.h
#ifndef _STRATEGY_H_
#define _STRATEGY_H_

class Strategy
{
public:
        //Strategy();
        //~Strategy();
        virtual void AlgrithmInterface() = 0;
};

class ConcreteStrategyA :public Strategy
{
public:
        //ConcreteStrategyA();
        //~ConcreteStrategyA();
        virtual void AlgrithmInterface();
};

class ConcreteStrategyB :public Strategy
{
public:
        //ConcreteStrategyB();
        //~ConcreteStrategyB();
        virtual void AlgrithmInterface();
};

class Context
{
public:
       Context( Strategy*);
       ~Context();
        void DoEvent();
private:
        Strategy* _Strategy;
};

#endif
//Strategy.cpp
#include "stdafx.h"
#include "Strategy.h"
#include <iostream>
using namespace std;
void ConcreteStrategyA ::AlgrithmInterface()
{
       cout << "ConcreteStrategyA::AlgrithmInterface()" << endl;
}

void ConcreteStrategyB ::AlgrithmInterface()
{
       cout << "ConcreteStrategyB::AlgrithmInterface()" << endl;
}

Context::Context(Strategy * strategy )
{
        this->_Strategy = strategy;
}

Context::~Context()
{
        delete this->_Strategy;
}

void Context ::DoEvent()
{
       _Strategy->AlgrithmInterface();
}
// StrategyMethod.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Strategy.h"


int _tmain (int argc , _TCHAR * argv [])
{
        Strategy* pStrategy = new ConcreteStrategyA();
        Context* pContext = new Context(pStrategy);
       pContext->DoEvent();

       pStrategy = new ConcreteStrategyB();
       pContext = new Context(pStrategy);
       pContext->DoEvent();
       getchar();
        return 0;
}
  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值