欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式(二十二)——行为变化模式-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;
}

设计二更改版本

设计二比设计一区别

模式定义

将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;队请求排队或记录请求日志,以及支持可撤销的操作。

模式结构

设计模式(二十二)——行为变化模式-Command_命令模式

要点总结

行为抽象为对象,实现松耦合。