命令模式___学习笔记

命令模式

    /**
     * 命令模式
     *      将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;
     *      将请求排队或记录请求日志;
     *      以及支持可撤销的操作
     *      
     * 作用:
     *      1.较容易设计一个命令队列
     *      2.在需要的情况下,容易实现将命令写入日志
     *      3.允许接收方是否绝决定接收请求
     *      4.容易实现对命令的撤销和修改
     *      5.添加新的命令参数时不影响其他命令类,容易扩展
     *      6.实现将命令的请求对象和执行对象分割开
     */

结构图

这里写图片描述

范例

//命令的执行者
public class BBQer {
    public void bakeMutton(){
        Log.d("meee", "烤羊肉");
    }
    public void bakeChicken(){
        Log.d("meee", "拷鸡肉");
    }
}
//命令的封装
public abstract class Command {
    protected BBQer mBBQer;

    public Command(BBQer BBQer) {
        mBBQer = BBQer;
    }
    abstract public void execCommand();
}
//命令队列的管理者
public class Waiter {
    private List<Command> mCommands=new ArrayList<>();
    public void setOrder(Command command){
        mCommands.add(command);
    }
    public void notifyCommand(){
        for (Command command:mCommands){
            command.execCommand();
        }
    }
}
//命令的具体实现类
public class BakeMuttonCommand extends Command {
    public BakeMuttonCommand(BBQer BBQer) {
        super(BBQer);
    }

    @Override
    public void execCommand() {
        mBBQer.bakeMutton();
    }
}
public class BakeChickenCommand extends Command{
    public BakeChickenCommand(BBQer BBQer) {
        super(BBQer);
    }

    @Override
    public void execCommand() {
        mBBQer.bakeChicken();
    }
}
//客户端代码
        //开店前的准备
        BBQer bbQer=new BBQer();
        Command bakeMutton=new BakeMuttonCommand(bbQer);
        Command bakeChicken=new BakeChickenCommand(bbQer);
        Waiter waiter = new Waiter();

        //营业
        waiter.setOrder(bakeMutton);
        waiter.setOrder(bakeMutton);
        waiter.setOrder(bakeChicken);
        waiter.setOrder(bakeMutton);
        waiter.notifyCommand();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值