设计思想学习—命令模式

命令模式

命令模式(Command):将请求封装成一个对象,从而使你可以用不同的请求对客户客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

同样的讲一样烤羊肉串的案例,不过说到烤羊肉串不知道你们今天中午有没有玩芝士超人,答到第十题惜败啊!离平分二十万奖金只差一点点。

记得第五题是致癌物含量最高的是A火锅B炸鸡C烤羊肉串。毫无疑问答案就是羊肉串了,想必大家都爱吃,不过为了身体着想还是少吃吧!

回归话题,大家肯定都有街边撸串的经历,你选择一些串串后直接交给老板烤,然后我们就看下代码实现

Class Barbecuer{
    Public void barbecue{
    System.out.println(“开始烧烤”);
}
}
Piblic class Client{
    Public static void main(String[] args){
        Barbecuer bbq=new Barbecuer();
        Bbq.barbecue();
}
}

这就是简单的路边撸串 客户告诉老板要什么串老板开始烤。

但是问题就来了:

  • 其一在代码里面这样耦合度太高。
  • 其二当你觉得吃不下,或者不想要的时候,老板已经开始烤了已经不能更改了。

有什么解决办法呢?
对,就是餐厅模式,你不跟真正烤的人讲要求,而是把要吃的串串咸辣等要求都告诉服务员,然后服务员把这一连串的需求给后厨。
画成简图就是:
这里写图片描述
然后我们用代码实现下:

//首先是服务员
class waiter{
    //需求命令
    private Command command;
    //接收需求命令
    public void setCommand(Command command){
        this.command=command;
    }
    //传递命令
    public void notifya(){
        command.toExecute();
    }
}
//然后是抽象的需求(命令)
abstract class Command{
    //持有将要传递的目标
    protected Barbecuer barbecuer;
    public Command(Barbecuer barbecuer){
        this.barbecuer= barbecuer;
    }
    //给目标执行
    public void toExecute(){
        barbecuer.execute();
    }
}
//实际需求(命令)
class shashlikCommand extends Command{
    public shashlikCommand(Barbecuer barbecuer) {
        super(barbecuer);
    }
    public void toExecute(){
        System.out.println("十串羊肉串");
        super.barbecuer.execute();
    }
}
class pepper extends Command{
    public pepper(Barbecuer barbecuer) {
        super(barbecuer);
    }
    public void toExecute(){
        System.out.println("多辣椒");
        super.barbecuer.execute();
    }
}
//最后是实际的执行者
class Barbecuer{
    public void execute(){
        System.out.println("收到");
    }
}
public class Client {
}

根据代码画出我们的UML图

这里写图片描述

命令模式构成:

  • 命令(Command):声明了一个给所有具体命令类的抽象接口。

  • 具体命令(ConcreteCommand):定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。

  • 请求者(Invoker):负责调用命令对象执行请求,相关的方法叫做行动方法。

  • 接收者(Receiver):负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值