Java设计模式之命令模式

定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式涉及的角色:
1.Command:抽象命令类
定义命令的接口,声明执行的方法。
2.ConcreteCommand:具体命令类
命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
3.Receiver:接收者
接收者,真正执行命令的对象。
4.Invoker:调用者
要求命令对象执行请求,通常会持有命令对象,可以持有多个命令对象。
5.Client:
创建具体的命令对象,并且设置命令对象的接收者。
以下以客户要求打扫卫生为例,解析命令模式。客户要求打扫卫生,往往先找到经理,给经理下命令,经理接到命令,让保洁员去执行命令。在此,客户是Client,经理是Invoker,保洁员是Receiver,具体清洁命令是ConcreteCommand。
Command,抽象命令类

package com.example.command;

public interface Command {
    void clean();
    void undoClean();

}

具体命令类

package com.example.command;

public class CleanRoomCommand implements Command{
    private Cleaner cleaner;

    public CleanRoomCommand(Cleaner cleaner) {
        this.cleaner = cleaner;
    }

    @Override
    public void clean() {
        cleaner.clean("打扫房间");
    }

    @Override
    public void undoClean() {
        cleaner.undoClean();
    }

}

保洁员(接收者)

package com.example.command;

public class Cleaner {
    public void clean(String workContent){
        System.out.println(workContent);

    }

    public void undoClean(){
        System.out.println("放弃打扫卫生");

    }

}

经理(调用者)

package com.example.command;

public class Manager {
    private Command command;

    public Manager(Command command) {
        super();
        this.command = command;
    }

    public void clean(){
        command.clean();

    }

}

客户

package com.example.command;

public class Client {
    public static void main(String[] args) {
        Cleaner cleaner = new Cleaner();
        Manager manager = new Manager(new CleanRoomCommand(cleaner));
        manager.clean();

    }

}

打印结果

打扫房间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值