行为模型-Strategy(策略)模式
2014-10-27 10:20
337 查看
一、解决的问题:
Strategy模式和Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(contex)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。St a t e 模式也有类似的功能,他们之间的区别将在讨论中给出。
二、Strategy模式的类图
三、策略模型案例
举一个例子:一个人想去旅行,旅行的方式有很多种(比如:徒步旅行、乘坐飞机、乘坐大巴...等待)
我们可以从中间抽象出来一个策略算法就是旅行方式,一个应用场景就是人需要应用,代码如下:
输出结果:
WalkTravel...
BusTravel...
请按任意键继续. . .
四、总结
策略模式是一种定义算法家族的方法,从概念上说所有算法都是为了实现同样的目的,只是实现不同而已。
Strategy模式和Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(contex)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。St a t e 模式也有类似的功能,他们之间的区别将在讨论中给出。
二、Strategy模式的类图
三、策略模型案例
举一个例子:一个人想去旅行,旅行的方式有很多种(比如:徒步旅行、乘坐飞机、乘坐大巴...等待)
我们可以从中间抽象出来一个策略算法就是旅行方式,一个应用场景就是人需要应用,代码如下:
#include <iostream> /** * @brief 策略类接口。 * @note no * @warning no * @see no */ class TravelStrategy { public: virtual void travel() = 0; }; /** * @brief 策略类:乘坐公共汽车旅行的一种策略类。 * @note no * @warning no * @see no */ class Bustravel : public TravelStrategy { public: Bustravel(); ~Bustravel(); virtual void travel(); private: }; Bustravel::Bustravel() { } Bustravel::~Bustravel() { } void Bustravel::travel() { std::cout << "BusTravel..." << std::endl; } /** * @brief 策略类:徒步旅行的一种策略类。 * @note no * @warning no * @see no */ class Walktravel : public TravelStrategy { public: Walktravel(); ~Walktravel(); virtual void travel(); }; Walktravel::Walktravel() { } Walktravel::~Walktravel() { } void Walktravel::travel() { std::cout << "WalkTravel..." << std::endl; } /** * @brief 上述contex类一个旅行者类。 * @note no * @warning no * @see no */ class Person { public: Person(TravelStrategy* pTravelStrategy); ~Person(); void travel(); private: TravelStrategy* m_travelStrategy; }; Person::Person(TravelStrategy* pTravelStrategy) { m_travelStrategy = pTravelStrategy; } Person::~Person() { if (m_travelStrategy) { delete m_travelStrategy; m_travelStrategy = NULL; } } void Person::travel() { if (m_travelStrategy) { m_travelStrategy->travel(); } else { std::cout << "cont not set travel stategy..." << std::endl; } } //客户端使用 int main(int argc, char* argv[]) { Person person(new Walktravel); person.travel(); Person BusPerson(new Bustravel); BusPerson.travel(); return 0; }
输出结果:
WalkTravel...
BusTravel...
请按任意键继续. . .
四、总结
策略模式是一种定义算法家族的方法,从概念上说所有算法都是为了实现同样的目的,只是实现不同而已。
相关文章推荐
- 设计模式08-策略模式Strategy(对象行为模式)
- 策略模式(Strategy)----行为笔记
- 行为模式:Strategy(策略)
- 【设计模式基础】行为模式 - 5 - 策略(Strategy)
- 行为类模式(九):策略(Strategy)
- STRATEGY(策略)——对象行为模式
- Java与模式 策略模型 Strategy
- 行为模式——策略( strategy)模式
- Java设计模式(15)——行为模式之策略模式(Strategy)
- [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)
- 【设计模式学习笔记二十二】【行为模式】【策略模式(Strategy)】
- 行为设计模式---策略模式(Strategy)
- 对象行为模式——策略模式(Strategy)
- 行为模式之Strategy(策略)
- strategy(策略)—对象行为模型
- STRATEGY(策略)-对象行为模式
- 设计模式之Strategy(策略)
- 鸭子-策略模式(Strategy)
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
- 策略(Strategy)模式