城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

模式(六):命令(Command)模式

Posted on 2008-07-24 17:20 sailor 阅读(208) 评论(0)  编辑  收藏 所属分类: 模式

定义
    将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

要点
    命令模式将发出请求的对象和接受请求的对象解耦;

    在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或者一组对象;

    调用者通过调用命令对象的execute()发出请求,这会使得接受者的动作被调用;

    调用者可以接受命令当作参数,甚至在运行时动态地进行;

    命令也可以实现日志和实务系统。


所涉及的角色:
1.客户(Client)角色:
创建一个具体对象及其确定接收者.
2.命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
3.具体命令(ConcreteCommand)角色:定义一个接收者与行为之间的弱耦合,实现exceute()方法,负责调用接收者的相应操作
4.请求者(Invoker)角色:
负责调用命令对象执行请求。
5.接收者(Recevice)角色:负责具体实施与执行一个请求。
commmand.bmp
优点:
解耦了发送者和接受者之间联系。 发送者调用一个操作,接受者接受请求执行相应的动作,因为使用Command模式解耦,发送者无需知道接受者任何接口。

命令模式创建的一般步骤
1.客户端创建一个ConcreteCommand对象,并指明接收者。
2.请求对象保持ConcreteCommand对象。
3.请求对象通过调用action方法发出请求,若命令是可撤消,则ConcreteCommand保存execute()方法执行前的状态。
4.ConcreteCommand对象调用接收的方法执行请求。

实例
抽象命令接口:

package command;
public interface Command{
    
//执行方法
     void execute();
}

具体命令

package command;
public class ConcreteCommand implements Command{
    
//接收者
    private Receiver receiver;
    
//构造方法
    public ConcreteCommand(Receiver receiver){
        
this.receiver=receiver;
    }

    
//执行方法
    public void execute(){
        receiver.action();
    }

}

接收者:

package command;
public  class Receiver {
    
//构造方法
    public Receiver(){};
    
//行为方法
    public void action(){
        System.out.println(
"Action is taken here");
    }

}

请求者:

package command;
public class Invoker{
    
//命令
    private Command command;
    
//构造方法
    public Invoker(Command command){
        
this.command=command;
    }

    
//行为方法
    public void action(){
        command.execute();
    }

}

客户端:

package command;
public class Client{
    
public static void main(String[] args){
        Receiver receiver
=new Receiver();
        Command concreteCommand
=new ConcreteCommand(receiver);
        Invoker invoker
=new Invoker(concreteCommand);
        invoker.action();
    }

}

命令模式与责任链模式区别:
责任链模式使一个特定的请求接收对象对请求与命令的执行变得不确定性.而命令模式使得一个特定的对象对命令的执行变得明显与确定.

参考资料:《First Head 设计模式》
                        设计模式学习笔记(十五)--------命令(Command)模式


只有注册用户登录后才能发表评论。


网站导航: