`
zdsyouxiang
  • 浏览: 25308 次
  • 性别: 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 通过记录命令堆栈,做到服务的恢复就变得很容易。

分享到:
评论

相关推荐

    命令模式最简单实现

    命令模式,最简单的实现命令模式,没有对需求的负责理解,只针对模式本身。最纯粹的体现命令模式的特点

    代理+命令模式学习笔记

    代理设计模式、命令模式学习笔记,其中包含对模式的理解以及详细的模式使用示例

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

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2306606

    [删除] 设计模式 - 命令模式(C++实例)

    命令模式 Command 设计模式 若理解有问题,还请大S指教。

    命令模式代码原理入门案例

    最近看了《大话设计模式》中的命令...当看到命令模式的时候,感觉并不是太好理解,于是上网搜索了些资料。于是想写下自己对命令模式的一些看法,以加深理解。 有兴趣可以看一下这篇文章,上述代码是这篇文章中提到的 ...

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

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

    命令模式(Command Pattern).rar

    用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...

    深入理解JavaScript系列(34):设计模式之命令模式详解

    主要介绍了深入理解JavaScript系列(34):设计模式之命令模式详解,命令模式(Command)的定义是:用于将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及执行可撤销...

    设计模式课件大全

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

    命令模式样例

    使用java实现的命令模式样例,适合初学者理解设计模式

    深入理解JavaScript系列

    深入理解JavaScript系列(34):设计模式之命令模式 深入理解JavaScript系列(35):设计模式之迭代器模式 深入理解JavaScript系列(36):设计模式之中介者模式 深入理解JavaScript系列(37):设计模式之享元...

    JAVA设计模式之行为模式

    包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor(访问模式)、Command(命令模式)的源代码,...

    命令模式6

    Struts技术为利用这个框架的开发者规定了一个模型,这个模型的思想其实就是命令模式及该模式的一些演变,所以理解Struts用好它来进行开发,就应该理解命令模式。所以我在给新入职的Java开发人员讲解Struts之前,都会...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。...使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

    命令模式的例子,大家可以看看哦

    大家可以学习学习啊,掌握了设计模式那才叫真正的理解了呢,呵呵呵

    设计模式系列之组合模式

    掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。 组合模式可以让客户端像修改配置文件一样简单的完成本来需要流程控制语句来完成的功能。 经典案例:系统目录结构,网站...

    深入浅出java设计模式(高清中文PDF)

    命令模式 14.解释器模式 15.迭代器模式 16.调停者模式 17.备忘录模式 18.观察者模式 19.策略模式 20.状态模式 21.模板模式 22.访问者模式 最后,还附带一个关于“分派”的章节!为了读者对访问者模式有更...

    java中的设计模式,主要的设计模式

    设计模式:(常用23种-----像内功心法) 1. 设计模式不是一个知识点 2. 设计模式是一种设计经验的总结 3. 设计模式是用来解决某些场景下的某一类问题-------... 命令模式、状态模式、备忘录模式、访问者模式、中介者模式

Global site tag (gtag.js) - Google Analytics