Java设计模式之命令模式

命令模式(command)

概念:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的动作。
优点:
1、命令模式将发出请求的对象和执行请求的对象解耦
2、在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作
3、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用
适用:
抽象出待执行的动作以参数化某对象;在不同的时刻指定、排列和执行请求;支持取消操作;支持修改日志。
这里写图片描述

示例代码:

/**
 * 命令接口
 */
public interface Command {
    public void execute();// 执行命令
    public void undo(); // 撤销命令
}
/**
 * 命令发出者
 */
public class Invoker {
    private Command command;
    public void setCommand(Command command) {
        this.command = command;
    }
    public Command getCommand() {
        return command;
    }
    public void runCommand(){ // 执行命令    
        command.execute();
    }
    public void unDoCommand(){//撤销命令     
        command.undo();
    }
}
/**
 * 命令接收者,命令真正执行人
 */
public class Receiver {
    public void action(){
        System.out.println("执行命令...");
    }
    public void unAction(){
        System.out.println("撤销命令...");
    }
}
/**
 * 将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现excute
 */
public class CreateCommand implements Command{
    private Receiver receiver;
    public CreateCommand(Receiver receiver){
        this.receiver = receiver;
    }
    public void execute() {
        receiver.action();
    }
    public void undo() {
        receiver.unAction();
    }
}
/**
 * 命令模式的测试
 * 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化
 * 要点:
    1、命令模式将发出请求的对象和执行请求的对象解耦
    2、在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作
    3、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用
 */
public class Test {
    public static void main(String[] args) {
        //创建接受者
        Receiver receiver = new Receiver();
        //创建命令对象,并设置它的接受者
        Command command = new CreateCommand(receiver);
        //创建调用者,将命令对象设置进去
        Invoker invoker = new Invoker();
        invoker.setCommand(command);
        //这里可以测试一下
        invoker.runCommand();
        invoker.unDoCommand();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心歌技术

打赏不能超过你的早餐钱!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值