设计模式-Command(行为模式) 将一个请求封装到一个Command类中,提供一个处理对象Receiver,将Command由Invoker激活。

//方式一

//Reciever.h

#pragma once

class Reciever{
public:
    Reciever();
    ~Reciever();
    void Action();
protected:
private:
};

//Reciever.cpp

#include"Reciever.h"
#include<iostream>

Reciever::Reciever(){}

Reciever::~Reciever(){}
void Reciever::Action()
{
    std::cout << "Reciever action ..." << std::endl;
}

//Command.h

#pragma once

class Reciever;

class Command{
public:
    virtual ~Command();
    virtual void Execute() = 0;
protected:
    Command();
private:
};

class ConcreateCommand :public Command
{
public:
    ConcreateCommand(Reciever* rec);
    ~ConcreateCommand();
    void Execute();
protected:
private:
    Reciever* _rec;
};

//Command.cpp

#include"Command.h"
#include"Reciever.h"
#include<iostream>

Command::Command(){}
Command::~Command(){}
void Command::Execute(){}

ConcreateCommand::ConcreateCommand(Reciever* rec)
{
    _rec = rec;
}
ConcreateCommand::~ConcreateCommand()
{
    delete this->_rec;
}
void ConcreateCommand::Execute()
{
    _rec->Action();
    std::cout << "ConcreateCommand ..." << std::endl;
}

//Invoker.h

class Command;
class Invoker
{
public:
    Invoker(Command* cmd);
    ~Invoker();
    void Invoke();
protected:
private:
    Command* _cmd;
};

//Invoker.cpp

#include"Command.h"
#include"Invoker.h"
#include<iostream>

Invoker::Invoker(Command* cmd)
{
    _cmd = cmd;
}
Invoker::~Invoker()
{
    delete _cmd;
}
void Invoker::Invoke()
{
    _cmd->Execute();
}

//main.cpp

#include"Command.h"
#include"Invoker.h"
#include"Reciever.h"
#include<iostream>
#include<string>

int main(int args, char* argv)
{
    Reciever* rec = new Reciever();
    Command* cmd = new ConcreateCommand(rec);
    Invoker* inv = new Invoker(cmd);
    inv->Invoke();
    getchar();
    return 0;
}

原文地址:https://www.cnblogs.com/fourmi/p/12085089.html

时间: 2024-10-07 05:09:11

设计模式-Command(行为模式) 将一个请求封装到一个Command类中,提供一个处理对象Receiver,将Command由Invoker激活。的相关文章

eclipse在debug模式下总是自动进入到ThreadPoolExecutor类中

当我们将web项目发布到tomcat服务器中,并且以debug模式启动的时候,总是自动跳转到 ThreadPoolExecutor 类中,如下: 解决办法 在eclipse中点击Window->Preference->Java->Debug 将“Suspend execution on uncaught exceptions”的勾去掉即可 如下图:

设计模式-Template(行为模式) 采用 继承的方式 将算法封装在抽象基类中,在子类中实现细节。利用面向对象中的多态实现算法实现细节和高层接口的松耦合。

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Template.h class AbstractClass { public: virtual ~AbstractClass(); void TemplateMethod(); protected: virtual void PrimitiveOperation1() = 0; virtual void PrimitiveOperation2() = 0; AbstractClass(); private: }; c

Thread并发请求封装——深入理解AsyncTask类

在Android开发中,由于不能再UI线程中做耗时操作,常常需要开启线程来做一些操作.但是这样一来就产生了一个问题,就是大量的线程并发执行,造成了线程维护的开销进而使得代码质量下降手机发烫又耗电.让我们来看一下KJFrameForAndroid框架是如何解决这个问题的.KJFrameForAndroid框架项目地址:https://github.com/kymjs/KJFrameForAndroid. 其实Android提供了一套专门用于异步处理的类,就是我们熟悉又模式的AsynTask类.As

将CRUD封装到一个工具类中

1 package org.zln.hibernate.utils; 2 3 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.Transaction; 7 import org.hibernate.cfg.Configuration; 8 9 import java.io.Serializable; 10 11 /** 12 * Created by coo

设计模式(十四):Command命令模式 -- 行为型模式

1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活. 例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不同操作. 2.问题 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧

设计模式 ( 十三 ) 命令模式Command(对象行为型)

设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活. 例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不同操作. 2.问题

设计模式——行为型模式(一)

行为模式涉及到算法和对象间职责的分配.行为模式不仅描述对象或类的模式,还描述他们之间的通信模式,这些模式刻画了在运行时难以跟踪的复杂的控制流.     行为类模式使用继承机制在类间分派行为:行为对象模式使用对象复合而不是继承. 1. TemplateMethod——类行为模式 作用: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. UML结构图:  抽象基类: AbstractClass 定义算法的

Android设计模式之命令模式、策略模式、模板方法模式

命令模式是其它很多行为型模式的基础模式.策略模式是命令模式的一个特例,而策略模式又和模板方法模式都是算法替换的实现,只不过替换的方式不同.下面来谈谈这三个模式. 命令模式 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. java中传递(注入)对象很容易,但是却不支持直接传递行为(即传递函数或者说传递方法),只能间接的通过传递(注入)一个对象,再调用它的行为来实现.如果把这样的行为抽取出来为一个类,称作命令类,它的具体实现都是命令

设计模式14:Command 命令模式(行为型模式)

Command 命令模式(行为型模式) 耦合与变化 耦合是软件不能抵御变化的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. 动机(Motivation) 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合——比如对行为进行“记录.撤销/重做(undo/redo).事务”等处理,这种无法抵御变化的紧耦合是不合适的. 在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的解耦. 意