`

[行为型模式]命令模式的理解

 
阅读更多



头文件
//CommandPattern.h

#ifndef COMMAND_PATTERN_H
#define COMMAND_PATTERN_H

#include <Windows.h>
#include <string>
using namespace std;


namespace CommandPattern
{

class Receiver
{
public:
    void Action();
};

class AbstructCommand
{
public:
    virtual ~AbstructCommand();
    virtual void Execute() = 0;
};

class ConcretetCommand : public AbstructCommand
{
public:
    ConcretetCommand(Receiver* pReciver);
    virtual ~ConcretetCommand();
    virtual void Execute();

private:
    Receiver* m_pReciver;
};


class Invoker
{
public:
    Invoker(AbstructCommand* pCommand);

    void Order();

private:
    AbstructCommand* m_pCommand;
};

//////////////////////////////////////////////////////////////////////////
void CommandPattern_Test();
}

#endif

实现
#include "CommandPattern.h"
#include <iostream>
using namespace std;

#define SAFE_DELETE(p) if (p) { delete p; p = NULL; }

namespace CommandPattern
{
    //////////////////////////////////////////////////////////////////////////
     void Receiver::Action()
     {
         cout << "Receiver->Action" << endl;
     }

     //////////////////////////////////////////////////////////////////////////
     AbstructCommand::~AbstructCommand()
     {

     }

    //////////////////////////////////////////////////////////////////////////
    ConcretetCommand::ConcretetCommand(Receiver* pReciver)
        : m_pReciver(NULL)
    {
        if (m_pReciver==NULL && pReciver!=NULL)
        {
            m_pReciver = pReciver;
        }
    }
     
    ConcretetCommand::~ConcretetCommand()
    {

    }

    void ConcretetCommand::Execute()
    {
        if (m_pReciver != NULL)
        {
            cout << "ConcretetCommand->Execute" << endl;
            m_pReciver->Action();
        }
    }

    //////////////////////////////////////////////////////////////////////////
    Invoker::Invoker(AbstructCommand* pCommand)
        : m_pCommand(NULL)
    {
        if (m_pCommand==NULL && pCommand!=NULL)
        {
            m_pCommand = pCommand;
        }
    }

    void Invoker::Order()
    {
        cout << "Invoker->Order" << endl;
        m_pCommand->Execute();
    }


    void CommandPattern_Test()
    {
        Receiver* pReceiver = new Receiver();
        ConcretetCommand* pConcreteCmd = new ConcretetCommand(pReceiver);
        Invoker* pInvoker= new Invoker(pConcreteCmd);

        pInvoker->Order();

        SAFE_DELETE(pReceiver);
        SAFE_DELETE(pConcreteCmd);
        SAFE_DELETE(pInvoker);
    }
}

客户端
#include "CommandPattern.h"


#include <iostream>
using namespace std;
using namespace CommandPattern;
void main()
{
    CommandPattern_Test();
}

运行结果
Invoker->Order
ConcretetCommand->Execute
Receiver->Action


分享到:
评论

相关推荐

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    java 23种设计模式及具体例子

    * 命令模式:命令模式是一种行为型模式,它可以将对象之间的关系建立在命令的基础上,以便于更好地实现对象之间的关系。 * 备忘录模式:备忘录模式是一种行为型模式,它可以将对象之间的关系建立在备忘录的基础上,...

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    设计模式 GOF 23

    5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6章 结论 232 6.1 设计模式将带来什么 232 6.2 ...

    设计模式:可复用面向对象软件的基础--详细书签版

    5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6章 结论 232 6.1 设计模式将带来什么 232...

    CC++与设计模式基础课程-讲义

    行为型模式关心类或对象怎样交互和怎样分配职责,包括模板方法模式、命令模式、责任链模式等。 在实战应用中,需要选择合适的设计模式来解决问题。学习设计模式的方法包括积累案例、大量背类图、多思考、多梳理、...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    设计模式精解及面试攻略

    第6章阐释行为模式(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者模式);第7章针对所有设计模式向初学者提供一些提示;第8章包括常见的面试问题及实际示例;第9章涵盖Java...

    设计模式Demo

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计...

    PHP命令Command模式用法实例分析

    命令模式的理解,关键有2点: 1. 使用接口。通常命令模式的接口中只有一个方法。 实现类的方法有不同的功能,覆盖接口中的方法。在面向对象编程中,大量使用if…else…,或者switch…case…这样的条件选择语句是...

    Vi命令.docx

    vi 编辑器是一个功能强大的编辑器。学习 vi 要从其基本工作模式开始学起。了解这些工作模式对用户理解 vi 编辑...vi 编辑器有 3 种基本工作模式,分别是命令模式、文本输入模式和末行模式。下面详 细介绍这 3 种模式。

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。 《Objective-C编程之道:iOS设计...

    DesignPattern:23种设计模式,Android原始设计模式分析-android

    继承子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式GitHub托管请读者点击明星进行关注并支持!在线阅读目录关注我对于一个开发者而言,能够胜任系统中任意一个模块的开发是...

    java-design-patterns:Java 设计模式学习笔记

    将不同的功能代码解耦桥接模式装饰器模式适配器模式外观模式组合模式享元模式行为型模式(更新中...)作用:将不同的行为代码解耦观察者模式模板方法模式策略模式职责链模式状态模式迭代器模式访问者模式备忘录模式...

    Java的23种设计模式疯狂Java总结.doc

    设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造...行为型模式37 1.3.1 责任链模式37 1.3.2 命令模式40 1.3.3 解释器模式43 1.3.4 迭代器模式45 1.3.5 中介者模式49 1.3.6 备忘录模式52 1.3.7 ...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    行为类型模式,共十种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式。 设计模式的六大原则 开闭原则(Open Close Principle)...

    java餐饮管理系统源码-pattern:设计模式扫盲,以身边故事来讲解设计模式

    命令模式 职责链模式 状态模式 观察者模式 中介者模式 迭代器模式 访问者模式 备忘录模式 模板方法模式 解释器模式 写在前面: UML图解 继承和实现是比较容易理解的两种类关系。在架构设计中,要注意组合、聚合和 ...

    百度地图开发java源码-DesignPatterns:要深刻理解开源代码,必先掌握丰富的设计模式

    命令模式(Command) 3.3 解释器模式(Interpreter) 3.4 迭代器模式(Iterator) 3.5 中介者模式(Mediator) 3.6 备忘录模式(Memento) 3.7 观察者模式(Observer) 3.8 状态模式(State) 3.9 策略模式(Stra

Global site tag (gtag.js) - Google Analytics