Java设计模式

java设计模式之命令模式

2019-03-20  本文已影响3人  我有一只喵喵

一、命令模式概念

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象实现二者之间的松耦合。这就是命令模式(Command Pattern)。

二、模式结构

定义命令的接口,声明一系列执行的方法。比如:运行、撤销、停止开始

对Command接口进行实现,内部持有接收者Receiver对象(正在命令的执行者),调用接收者的功能来完成命令要执行的操作

接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。

命令调用者。要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。

创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。

三、类图结构概览

类图结构.png

四、通过餐厅叫餐服务进行举例实现

public interface Command {
    void cooking();
}
public class ConcreteCommand implements Command{

    private Chef chef;
    
    public OrderImpl(Chef chef){
        this.chef = chef;
    }

    public void cooking(){
        chef.cooking();
    }
}
//厨师统一接口
public interface Chef {

    void cooking();
}

//分别做不同菜种的厨师
public class 鸡蛋炒饭厨师 implements  Chef {

   public void cooking(){
       System.out.println("我在做鸡蛋炒饭");
   }
}

public class 西红柿炒饭厨师 implements  Chef {

    public void cooking(){
        System.out.println("我在做西红柿炒饭");
    }
}
public class Invoker{
   private Command command;

   public Invoker(Command command){
      this.command = command;
   }
   public void cooking(){
       command.cooking();
   }
}

-Client


public class Client{
    
    public void cooking(Chef chef){
        Commond commond = new ConcreteCommand(chef);
        Invoker invoker = new Invoker(commond);
        invoker.cooking();
    }


}

五、命令模式的作用

上一篇下一篇

猜你喜欢

热点阅读