java设计模式-命令模式

模式导读:

     无论是小学高中还是大学,甚至走向社会,你都会发现阶级的存在,时刻保持对上一层阶级的尊重,同时努力完成他们给我们的任务,学生时刻保持对教师的尊重,员工保持对老板,领导们的尊重,他们给我们的作业我们都会去积极的完成,他们每发放一个命令我们都得去努力执行,而他们并不需要关注你执行命令的过程,你只需要将结果反馈就好,这便是命令模式。

参考类图:

代码实现:

1.首先要有一个抽象的命令类,里面包含对具体执行命令的对象的引用,同时给一个抽象的执行命令的方法

1 package com.etc;
2 //抽象的命令
3 public abstract class Command {
4     //接到命令干活的具体工人
5     public Worker worker=new Worker();
6     //命令执行方法
7     abstract void execute();
8 }

2.定义一个抽象的执行命令员工角色,里面有抽象的各种命令执行方法

 1 package com.etc;
 2 
 3 public abstract class abstractWorkMan {
 4      //加班
 5      abstract void overWork();
 6      //端茶
 7      abstract void serveTea();
 8      //倒水
 9      abstract void serveWater();
10          
11     
12 }

3.具体的员工角色

 1 package com.etc;
 2 
 3 public class Worker extends abstractWorkMan{
 4 
 5     @Override
 6     void overWork() {
 7         System.out.println("任务怎么还没完成,今天加班!");    
 8     }
 9     @Override
10     void serveTea() {
11         System.out.println("小王啊,给我倒杯茶过来!");
12     }
13     @Override
14     void serveWater() {
15         System.out.println("小王啊,给我倒杯水过来!");
16     }
17 }

4.定义一个老板角色,具有设置命令和通知员工执行命令的方法

 1 package com.etc;
 2 //老板,具有发布命令和通知的权限
 3 public class Boss {
 4     private Command command;
 5     
 6     public Command getCommand() {
 7         return command;
 8     }
 9     //下达命令
10     public void setCommand(Command command) {
11         this.command=command;
12     }
13     //命令通知执行
14     public void Notify() {
15       command.execute();
16     }
17 }

5.命令的具体执行类

 1 package com.etc;
 2 //具体的命令实现
 3 public class WorkCommand extends Command{
 4 
 5     @Override
 6     void execute() {
 7         //调用父类保持的对worker对象引用的下面的具体实现方法
 8         super.worker.overWork();
 9         super.worker.serveTea();
10         super.worker.serveWater();
11 
12     }
13 
14 }

6.客户端角色,实现情景模拟

 1 package com.etc;
 2 //具体的情景类
 3 public class Client {
 4 
 5     public static void main(String[] args) {
 6         //具体命令对象
 7         Command command=new WorkCommand();
 8         Boss boss=new Boss();
 9         //老板设置命令
10         boss.setCommand(command);
11         //通知命令执行
12         boss.Notify();
13     }
14 
15 }

效果截图:

命令模式优缺点:

优点:

  • 实现客户端和接受者之间的解耦。
  • 可以动态的添加新的命令。
  • 只需要调用同一个方法(execute()方法)便可以实现不同的功能。

缺点:

  •  实现一个具体的命令系统,可能要创建很多的具体命令对象。

适用场景:

  • 只要有命令就离不开命令模式。

 

原文地址:https://www.cnblogs.com/weekstart/p/10767278.html