• 设计模式总结篇系列:命令模式(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 }
  • 相关阅读:
    sqlalchemy 查询姿势总结
    sqlalchemy 常用总结
    rsyslog 移植与配置方案介绍
    软件设计随想录
    C语言面对对象设计模式汇编
    关于linux kernel slab内存管理的一点思考
    linux PMBus总线及设备驱动分析
    Linux x86_64 APIC中断路由机制分析
    单板控制领域模型设计与实现
    Linux mips64r2 PCI中断路由机制分析
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3803022.html
Copyright © 2020-2023  润新知