Java二十三设计模式之------命令模式

一、命令模式(Command)

命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。我们看看关系图:

Invoker是调用者(司令员),Receiver是被调用者(士兵),MyCommand是命令,实现了Command接口,持有接收对象,看实现代码:

  1. public interface Command {
  2. public void exe();
  3. }

 

  1. public class MyCommand implements Command {
  2. private Receiver receiver;
  3. public MyCommand(Receiver receiver) {
  4. this.receiver = receiver;
  5. }
  6. @Override
  7. public void exe() {
  8. receiver.action();
  9. }
  10. }
  1. public class Receiver {
  2. public void action(){
  3. System.out.println("command received!");
  4. }
  5. }
  1. public class Invoker {
  2. private Command command;
  3. public Invoker(Command command) {
  4. this.command = command;
  5. }
  6. public void action(){
  7. command.exe();
  8. }
  9. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. Receiver receiver = new Receiver();
  4. Command cmd = new MyCommand(receiver);
  5. Invoker invoker = new Invoker(cmd);
  6. invoker.action();
  7. }
  8. }

输出:command received!

这个很好理解,命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!

转载自  https://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

原文地址:https://www.cnblogs.com/wuxinyiwu/p/8409224.html

时间: 2024-10-28 14:59:23

Java二十三设计模式之------命令模式的相关文章

Java二十三设计模式之------建造者模式

一.建造者模式(Builder) 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的.我们看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender.最后,建造者类如下: public class Builder { private List<Sender> list = new ArrayList&l

Java二十三设计模式之-----外观模式

一.外观模式(Facade) 外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例) 我们先看下实现类: public class CPU { public void startup(){ System.out.println("cpu startup!"); } public void shut

Java二十三设计模式之-----桥接模式

一.桥接模式(Bridge) 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了.我们来看看关系图: 实现代码: 先定义接口: public interface Sourceable {

Java二十三设计模式之------工厂方法模式

一.工厂方法模式 工厂方法模式有三种 1.普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interface Sender { public void Send(); } 其次,创建实现类: public class MailSender implements Sender { @Override public void Send() { System.out.pr

Java二十三设计模式之------享元模式

一.享元模式(Flyweight) 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类.一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就

Java二十三设计模式之------中介者模式

一.中介者模式(Mediator) 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用.先看看图: User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Medi

Java二十三设计模式之------解释器式

一.解释器模式(Interpreter)解释器模式一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. Context类是一个上下文环境类,Plus和Minus分别是用来计算的实现,代码如下: public interface Expression { public int interpret(Context context); } public class Plus implements Expression { @Override public int interpret(Cont

java学习笔记-设计模式19(命令模式)

意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作 public interface Command { public void exe(); } public class MyCommand implements Command { private Receiver receiver; public MyCommand(Receiver receiver) { this.receiver = receiver; } @Over

Java二十三设计模式之-----适配器模式

一.适配器模式 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式. 1.类的适配器模式 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码: public class Source { public void method1() { System.out.pr