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()方法)便可以实现不同的功能。
缺点:
- 实现一个具体的命令系统,可能要创建很多的具体命令对象。
适用场景:
- 只要有命令就离不开命令模式。