zoukankan      html  css  js  c++  java
  • 设计模式总结篇系列:命令模式(Command)

    在程序设计中,经常会遇到一个对象需要调用另外一个对象的某个方法以达到某种目的,在此场景中,存在两个角色:请求发出者和请求接收者。发出者发出请求,接收者接收请求并进行相应处理。有时候,当需要对请求发出者和接收者进行解耦,即发出者中不能含有接收者的引用,如请求需要进行排队操作,或可能需要对请求进行取消操作等,在此类场景中,请求发出者此时若还是直接操作接收者,将无法满足此类需求。此时,我们可以使用命令模式。

    在命令模式中,当一个对象请求另一个对象其调用方法时,不和被请求的对象直接打交道,而是把这种请求封装到一个命令的对象中,封装的手段是将请求封装在命令对象的一个方法中。命令模式的核心就是使用命令对象来封装方法调用。既请求者的请求,接受者调用方法。

    下面以常见的首长对官兵下达命令为例:

    1.定义官兵类:

     1 class Soldier {
     2     
     3     public void zip(){
     4         System.out.println("开始拉练30公里...");
     5     }
     6     
     7     public void stand(){
     8         System.out.println("开始站军姿2小时...");
     9     }
    10 
    11 }

    2.定义命令类:

     1 class Command{
     2     
     3     private Soldier solider;
     4     
     5     public Command(Soldier solider){
     6         this.solider = solider;
     7     }
     8     
     9     public void stand(){
    10         solider.stand();
    11     }
    12     
    13     public void zip(){
    14         solider.zip();
    15     }
    16     
    17 }

    3.定义首长类:

     1 class Chief {
     2 
     3     private Command command;
     4 
     5     public Chief(Command command) {
     6         this.command = command;
     7     }
     8 
     9     public void startStand() {
    10         command.stand();
    11     }
    12 
    13     public void startZip() {
    14         command.zip();
    15     }
    16 }

    4.测试:

     1 public class CommandTest {
     2 
     3     public static void main(String[] args) {
     4         Soldier soldier = new Soldier();
     5         Command command = new Command(soldier);
     6         Chief chief = new Chief(command);
     7         chief.startStand();
     8     }
     9 
    10 }
  • 相关阅读:
    什么是大小端
    mina
    出现jar包找不到的问题解决方案
    InnoDB 静态数据加密的常见问题合集
    mysqldump 数据库备份程序,mysqldump 选项合集
    出现The MySQL server is running with the --secure-file-priv option so it cannot问题的原因
    小睡一会,做了一个梦
    IntelliJ IDEA is a solution that appears after importing a project with a clock icon(idea导入项目之后出现时钟的解决方案)
    IntelliJIDE不显示项目文件夹的问题
    夏天的记忆
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3803022.html
Copyright © 2011-2022 走看看