命令模式 详解

命令模式(别名:动作,事务)

将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,心腹支持可撤销的操作。


Receiver(接收者):接收者是一个类的实例,该实例负责执行与请求相关的操作。

Command(命令)接口:命令是一个接口,规定了用来封装“请求”的若干个方法,比如execute()、undo()等方法.

ConcreteCommand(具体命令):是实例命令接口的类的实例。具体命令必须实现命令接口中的方法,比如execute()方法,使该方法封装一个“请求”。

Invoker(请求者):是一个包含Command接口变量的类的实例。请求者中的Command接口的变量可以存放任何具体命令的引用。请求者负责调用具体命令,让具体命令执行那些封装了“请求”的方法,比如execute()方法。

 

  • 使用
  1. 接收者(Receive)    Company.java
    Java代码   收藏代码
    1. public class CompanyArmy{  
    2.     public void sneakAttack(){  
    3.         System.out.println("我们知道如何偷袭敌人,保证完成任务");  
    4.     }  
    5. }  
     
  2. 命令(Command)接口
    Java代码   收藏代码
    1. public interface Command {  
    2.     public void execute();  
    3. }  
     
  3. 具体命令(ConcreteCommand)
    Java代码   收藏代码
    1. public class ConcreteCommand implements Command {  
    2.   
    3.     CompanyArmy army;//含有接收者的引用  
    4.     ConcreteCommand(CompanyArmy army){  
    5.         this.army = army;  
    6.     }  
    7.     public void execute() {//封装着指挥官的请求  
    8.         army.sneakAttack();  
    9.     }  
    10.   
    11. }  
     
  4. 请求者(Invoker)
    Java代码   收藏代码
    1. public class ArmySuperior {  
    2.     Command command;  
    3.     public void setCommand(Command command){  
    4.         this.command = command;  
    5.     }  
    6.     public void startExecuteCommand(){//让具体命令执行execute方法  
    7.         command.execute();  
    8.     }  
    9. }  
     
  5. 模式的使用
    Java代码   收藏代码
    1. public class Main {  
    2.   
    3.     /** 
    4.      * @param args 
    5.      */  
    6.     public static void main(String[] args) {  
    7.         //创建接收者  
    8.         CompanyArmy ca = new CompanyArmy();  
    9.         //创建具体命令并指定接收者  
    10.         Command command = new ConcreteCommand(ca);  
    11.         //创建命令的请求者  
    12.         ArmySuperior commander = new ArmySuperior();  
    13.         commander.setCommand(command);  
    14.         commander.startExecuteCommand();  
    15.     }  
    16.   
    17. }  
  • 适合使用命令模式:
  1. 程序需要在不现时刻指定、排序和执行请求
  2. 程序需要提供撤销操作
  3. 程序需要支持宏操作 

转载于:https://my.oschina.net/rouchongzi/blog/131021

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值