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

对象模式所属类别简介

行为变化模式分为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;
}

设计二更改版本

设计二比设计一区别

模式定义

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

模式结构

在这里插入图片描述

要点总结

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章