行为模型-Strategy(策略)模式
来源:互联网 发布:稚优泉水母面膜 知乎 编辑:程序博客网 时间:2024/05/22 08:45
一、解决的问题:
Strategy模式和Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(contex)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。St a t e 模式也有类似的功能,他们之间的区别将在讨论中给出。
二、Strategy模式的类图
三、策略模型案例
举一个例子:一个人想去旅行,旅行的方式有很多种(比如:徒步旅行、乘坐飞机、乘坐大巴...等待)
我们可以从中间抽象出来一个策略算法就是旅行方式,一个应用场景就是人需要应用,代码如下:
#include <iostream>/** * @brief 策略类接口。 * @noteno * @warning no * @seeno */class TravelStrategy{public: virtual void travel() = 0;};/*** @brief 策略类:乘坐公共汽车旅行的一种策略类。* @noteno* @warning no* @seeno*/class Bustravel : public TravelStrategy{public: Bustravel(); ~Bustravel(); virtual void travel();private:};Bustravel::Bustravel(){}Bustravel::~Bustravel(){}void Bustravel::travel(){ std::cout << "BusTravel..." << std::endl;}/** * @brief 策略类:徒步旅行的一种策略类。 * @noteno * @warning no * @seeno */class Walktravel : public TravelStrategy{public: Walktravel(); ~Walktravel(); virtual void travel();};Walktravel::Walktravel(){}Walktravel::~Walktravel(){}void Walktravel::travel(){ std::cout << "WalkTravel..." << std::endl;}/** * @brief 上述contex类一个旅行者类。 * @noteno * @warning no * @seeno */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...
请按任意键继续. . .
策略模式是一种定义算法家族的方法,从概念上说所有算法都是为了实现同样的目的,只是实现不同而已。
0 0
- 行为模型-Strategy(策略)模式
- 行为模式 - 策略模式(Strategy)
- 行为模式之Strategy(策略)
- 策略模式(Strategy)----行为笔记
- 行为模式:Strategy(策略)
- 策略模式(Strategy)----行为笔记
- 行为型模式-策略(strategy)
- strategy(策略)—对象行为模型
- 行为型模式--策略模式(Strategy)
- 行为型模式-----策略模式(Strategy)
- [设计模式-行为型]策略模式(Strategy)
- 行为设计模式---策略模式(Strategy)
- 行为型模式-Strategy ( 策略模式 )
- 行为型模式-策略模式strategy
- Strategy模式(策略模式 行为型)
- 【设计模式】行为模式之Strategy策略
- Strategy 策略模式 --对象行为型模式
- 策略模式Strategy(对象行为型)
- 当你面对以下错误束手无措时 :fatal error C1902: 程序数据库管理器不匹配;请检查安装的解决办法
- Linux系统中/dev/mtd与/dev/mtdblock的区别
- Tomcat的服务器配置文件server.xml解析
- Python 正则表达式提取URL中的Query
- 文案写作方略
- 行为模型-Strategy(策略)模式
- 一元二次方程
- Android中利用Handler实现消息的分发机制(零)
- Thrift入门及Java实例演示
- android向服务器上传multipart/form-data文件(upload using multipart post using httpclient in android)
- R:向上级层次进行写操作
- 我写一个游戏,属于自己的游戏
- Eclipse 自动生成注释 方法
- 第9周项目3-输出星号图(e)