设计模式(二十二)——行为变化模式-Command_命令模式
程序员文章站
2022-06-09 21:29:58
...
对象模式所属类别简介
行为变化模式分为Command、visitor。
在组件的构建构成中,组件行为的变化经常导致组件本身剧烈的变化。行为变化模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。
当前模式简介动机
将一组行为抽象为对象,实现行为请求者和行为实现者进行解耦合。
需求
有两个指令,设置为一个总控制,总控制调用后调用两个指令对象。
设计一
需求更改
设计一更改版本
违反原则
设计二
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class ICommand
{
public:
virtual void execute()=0;
};
class Command1 : public ICommand
{
string m_arg;
public:
Command1(const string &str):m_arg(str){}
virtual void execute(){ std::cout << m_arg << std::endl;}
};
class Command2 : public ICommand
{
string m_arg;
public:
Command2(const string &str):m_arg(str){}
virtual void execute(){ std::cout << m_arg << std::endl;}
};
class Commander:public ICommand
{
vector<ICommand*> m_argVec;
public:
void addCmd(ICommand &cmd){m_argVec.push_back(&cmd);}
virtual void execute()
{
for (auto i:m_argVec)
{
(*i).execute();
}
}
};
int main()
{
Command1 cmd1("aaaaaaaaaa");
Command2 cmd2("bbbbbbbbbb");
Commander cmd;
cmd.addCmd(cmd1);
cmd.addCmd(cmd2);
cmd.execute();
return 0;
}
设计二更改版本
设计二比设计一区别
模式定义
将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;队请求排队或记录请求日志,以及支持可撤销的操作。
模式结构
要点总结
行为抽象为对象,实现松耦合。
上一篇: ViewPager轮播切换带动画效果