设计模式学习笔记--命令模式

一.简介

我们正常写程序的时候,要实现一个操作,都是直接调用相应对象的函数进行操作,这样,行为的请求者和行为的实现者就是一种紧耦合的关系。举个简单的例子,比如我们设计一个游戏,按A键是攻击,按B键是放大招,那么我们可以直接将这按键的功能写在相应按键的对应函数上,但是这并不是好的设计,因为我们操作的人物和输入系统发生了直接的耦合,这两者并没有什么直接的关系。比如我们要进行修改,更换键位,那么修改的内容可能就比较多了。更好的方式是将玩家的输入都看成命令,攻击命令,技能命令等等,玩家按下哪个键,就发出相应的命令。而如果我们需要更改键位,只需要修改命令和键位之间的映射表就可以了。这就是命令模式的一种简单的体现。不过,命令模式真正的好处并不仅限于此,使用命令模式,我们可以很容易的实现一套命令队列,将用户的请求排队处理,还可以将命令存储为日志,更进一步,我们还可以根据命令很容易的进行撤销重做的操作。可见,命令模式是一种灰常有用的模式!

命令模式的UML图如下:

二.命令模式的例子

就拿上面的例子,我们先看一个没有用命令模式的游戏,输入系统直接控制人物:
// C++Test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

//玩家类
class Character
{
public:
	void Attack()
	{
		cout<<"攻击!"<<endl;
	}

	void Skill()
	{
		cout<<"技能!"<<endl;
	}
};


//输入系统
class InPutSystem
{
private:
	Character* m_pCharacter;
public:
	void Invoke(Character* character)
	{
		m_pCharacter = character;
	}

	void Option(string option)
	{
		if (option == "attack")
			m_pCharacter->Attack();
		else if(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值