`
zdsyouxiang
  • 浏览: 26127 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

命令模式理解

阅读更多
命令模式


命令模式的核心思想是隔离了 调用者和 执行者。
对于调用者来说,通过一个命令执行接口,调用者就可以执行各种各样的命令,而无需关注命令的具体实现。


正常的程序调用过程:

A 调用者 ---- 》调用某个服务接口

示例:

[quote=""]public interface UserService {


    public void User getUserById(Long userId);


    public void removeUser(Long userId);


}

public class UserServiceImpl implements UserService {


    @Override


    public void removeUser(Long userId) {


        // TODO Auto-generated method stub


    }


    @Override


    public User getUserById(Long userId) {


        // TODO Auto-generated method stub


        return null;


    }


}





调用者 获取到服务接口 ,实例化服务实现类  ---》调用


调用方式大抵为 new UserServiceImpl().getUserById(xxx);


   


B调用者 ---》设置命令(要调用的命令)----》调用命令执行


1. 命令接口


public interface ICommand {


  public void excute();


}


2. 命令实现


public class PhoneCallCommand implements ICommand {

    private final Phone phone;


    private String phoneNum;


    public String getPhoneNum() {

        return phoneNum;

    }

    public PhoneCallCommand(){


        phone = new Phone();


}

    @Override


    public void excute() {


        phone.phoneCall();


    }


}


3. 命令调用者


public class Invoker {


   private ICommand command;

public void setCommand(ICommand command) {


    this.command = command;


}

public void  phoneControl( ){


    command.excute();


}


}


4. 命令调用测试


public class PhoneControlTest {


    @Test


    public void testObatainPhoneNumber() {


        // 调用者发出 获取电话号码的命名


        PhoneCallCommand command = new PhoneCallCommand();


        Invoker invoker = new Invoker();


        invoker.setCommand(command);


        invoker.phoneControl();


    }


}


整个调用的过程是:调用者设定要调用的命令,执行通用的调用方法,执行相应的命令。这样无论传入什么样的命令,调用者的逻辑的都不需要改变,当业务逻辑改变时只需要增加相应的Command实现即可。

通过比较我们也能够发现,命令模式也不是任何场合都适用的,在日常的web开发中,我们常常会调用一些接口,这些接口中有多种方法签名,例如增删改查等等。命令模式下的命令功能相对的单一,相当与一个方法的签名。也就是命令模式在调用发生次数较少时有很好的使用,当程序的一个接口需要封装很多的方法时,使用命令模式无疑会增加很多的Command类。这样反倒不方便了。


当然在web开发中使用命令模式也是很多的,在《hibernate实战》中hibernate的作者就介绍了一个应用命令模式构建页面展现和后台服务提供者分布式架构的例子,非常的有学习价值。

命令模式的好处很多


  1 调用队列控制 ,由于所有的命令都实现统一的接口,这样就可以设定一个队列,对这些所有的命令进行控制。


2 撤销功能,命令接口里可以设定执行开关和相应方法方便的实现 撤销功能。


3 通过记录命令堆栈,做到服务的恢复就变得很容易。

分享到:
评论

相关推荐

    设计模式-命令模式

    在实际开发中,理解并合理运用命令模式有助于提高代码质量,增强软件的灵活性和可维护性。通过阅读提供的博客链接(http://blog.sina.com.cn/s/blog_161d504630102wxis.html),你可以找到更多关于命令模式在iOS中的...

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

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象(调用者)与...

    设计模式之命令模式(Command)

    命令模式是一种行为设计模式,它的主要目的是将请求者与接收者解耦,使得请求的发起者无需知道哪个对象会执行这个请求,同时也让...理解并掌握命令模式对于提升软件设计能力,尤其是大型复杂系统的设计有着重要的作用。

    记事本 使用了策略模式和命令模式

    通过分析和学习这些代码,我们可以更深入地理解策略模式和命令模式在实际项目中的应用,同时也能提升自己的编程技巧和设计思维。 总的来说,策略模式和命令模式在记事本软件中的应用展示了设计模式在提高代码质量、...

    设计模式C++学习之命令模式(Command)

    命令模式是一种行为设计模式,它将请求封装为一个对象,使得可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。...在C++项目中,合理运用命令模式可以优化系统结构,使代码更加易于理解和扩展。

    Qt-命令模式

    总的来说,命令模式是Qt编程中一个非常实用的设计模式,它能帮助我们编写更加模块化、易于理解和维护的代码,同时提供了实现高级功能如撤销/重做的基础。通过熟练掌握命令模式,开发者可以更好地应对复杂项目的需求...

    C#命令模式应用

    首先,我们要理解命令模式的基本结构。在C#中,一个命令模式通常包含以下几个角色: 1. **Invoker(调用者)**:调用接收者来完成特定任务的角色,不关心接收者是谁,只负责发送命令。 2. **Receiver(接收者)**:...

    命令模式代码示例

    命令模式是一种行为设计模式,它将请求封装为一个对象,...通过以上内容,我们对命令模式有了深入的理解,包括它的角色、工作原理以及如何在代码中实现。这个示例代码和文档为学习和实践命令模式提供了很好的参考资料。

    命令模式代码demo

    通过这个命令模式的代码demo,你可以理解如何在实际项目中使用命令模式来提高代码的灵活性和可维护性。它帮助我们降低了模块间的耦合,使得系统更加易于扩展和重构。学习和掌握命令模式,将使你在设计和实现复杂系统...

    设计模式之命令模式案例代码

    通过阅读这些代码,你可以更清楚地理解命令模式如何在实际项目中工作。例如,可能存在多个具体命令类,每个类对应接收者的一个特定操作。调用者根据需要设置不同的命令,然后执行这些命令。 命令模式的应用场景广泛...

    设计模式之命令模式(Command Pattern)

    命令模式是一种行为设计模式,它将请求封装成独立的对象,使得可以使用不同的请求、队列请求、记录请求历史以及支持可撤销的操作。...理解并熟练运用命令模式,对于提升软件设计的质量和复用性具有重要意义。

    设计模式之命令模式详解(内附有例子,无源码)

    命令模式是一种行为设计模式,它将请求封装为...通过深入理解并应用命令模式,开发者能够更好地设计系统,使其更加灵活、可扩展且易于维护。在实际开发过程中,命令模式常用于事件驱动系统、GUI编程、事务处理等领域。

    命令模式 C++ 实现

    首先,我们需要理解命令模式的基本组成部分: 1. **命令接口(Command Interface)**:定义了执行命令的接口,通常包含一个执行操作的方法,如`execute()`。 2. **具体命令(Concrete Command)**:实现了命令接口,...

    设计模式作业——用命令模式java语言编写的烧烤店

    首先,理解命令模式的关键在于它的四个主要角色: 1. **Command(命令)接口**:定义了接收者应执行的命令操作。在烧烤店的场景中,这可能是下单、取消订单等操作。 2. **Concrete Command(具体命令)类**:实现了...

    路由器常用命令模式设置

    ### 路由器常用命令模式设置 在IT网络管理领域,路由器作为核心设备之一,其配置与管理显得尤为重要。本文将围绕路由器的常用命令及其功能进行详细介绍,旨在帮助网络管理员更好地理解和掌握这些命令,从而有效地...

    命令模式最简单实现

    在`CommandPattern.zip`文件中,可能包含了这个模式的示例代码,你可以进一步查看和学习这些代码,以便更好地理解和应用命令模式。记住,虽然这是一个简单的实现,但命令模式的威力在于其能够适应复杂的需求,例如在...

    命令模式Demo

    在"CommandPatternDemo"中,你将有机会看到这些概念如何在实际代码中体现,通过运行和分析这个Demo,你将能更好地理解和应用命令模式于你的项目中。无论是在GUI编程、事务处理、还是游戏设计等领域,命令模式都有...

    命令设计模式示例

    在压缩包`commandPro`中,可能包含了一系列关于命令设计模式的实例代码,你可以通过查看这些代码更深入地理解命令模式的实现和应用。这些代码可能包括不同类型的命令,例如批处理命令、可撤销命令等,以及如何在实际...

    探索JavaScript中的命令模式:构建灵活的命令执行机制

    理解命令模式的原理和实现方式,对于开发复杂的Web应用程序至关重要。 通过本文的介绍,你应该对如何在JavaScript中实现命令模式有了更深入的理解。记住,合理使用命令模式可以显著提升你的JavaScript编程能力。

Global site tag (gtag.js) - Google Analytics