设计模式15-命令模式

1. 概念

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

 

2. 案例

    

package org.demo.command.demo01;
/**
 * 将一个请求封装为一个对象,
 * 从而使你可用不同的请求对客户进行参数化;
 * 对请求排队或记录请求日志,以及支持可撤消的操作
 *  1.Command
    声明执行操作的接口。
    2.ConcreteCommand
    将一个接收者对象绑定于一个动作。
    调用接收者相应的操作,以实现Execute。
    3.Client
    创建一个具体命令对象并设定它的接收者。
    4.Invoker
    要求该命令执行这个请求。
    5.Receiver
    知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。

 */


class Receiver{
    public void receive(){
        System.out.println("知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者");
    }
}


abstract class Command{ 
    protected Receiver receiver ;  //指明命令的接受者
    public Command(Receiver receiver){
        this.receiver = receiver ;
    }
    public abstract void execute() ;  
}

class CommandImpl extends Command{
    public CommandImpl(Receiver receiver) {
        super(receiver);
    }

    public void execute() {  //执行的命令
        receiver.receive() ;
    }
}

class Invoker{
    private Command command ;
    public void setCommand(Command command){
        this.command = command ;
    }
    public void execute(){
        command.execute() ; //调用命令的执行方法   命令再去调用接受者的方法   因此接受者可以动态创建
    }
}
public class Demo01 {
    
     public static void main(String[] args) {
        Command command = new CommandImpl(new Receiver()) ;
        Invoker invoker = new Invoker() ;
        invoker.setCommand(command) ;
        invoker.execute() ;
        
    }
}

 

posted @ 2014-06-23 10:09  廖凯林  阅读(104)  评论(0编辑  收藏  举报