java 行为模式 命令设计模式 给其他模块下达命令

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

 

命令模式的构成

1 客户角色:创建一个具体命令对象,并确定其接收者

2 命令角色:声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口或抽象类实现

3 具体命令角色:定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作

4 请求者角色:负责调用命令对象执行请求。

5 接收者角色:负责具体实施和执行一个请求

UML类图:

                    

 

 

package com.designpattern;

public class CommandPatternDemo {

    public static void main(String[] args) {

        Receiver receiver = new Receiver();

        Invoker Invoker = new Invoker();
        CommandA commandA = new CommandA(receiver);
        Invoker.setCommand(commandA);
        Invoker.execute();

        CommandB CommandB = new CommandB(receiver);
        Invoker.setCommand(CommandB);
        Invoker.execute();

        // 有两种请求要发送过来执行
        // 一种请求就是读请求, 一种请求就是写请求,不同请求要执行的功能逻辑不一样的
        // 此时就非常适合命令模式
        // 将读请求封装到readCommand里面去,将写请求封装到writeCommand里面去
        // 然后设置一个通用的命令类来执行即可

    }

    public static class Receiver {

        public void read(){
            System.out.println(" read ......");
        }

        public void write(){
            System.out.println(" write ......");
        }
    }


    public interface Command {

        public void execute();
    }

    public static class CommandA implements Command {
        private   Receiver Receiver;

        public CommandA(CommandPatternDemo.Receiver receiver) {
            Receiver = receiver;
        }

        public void execute() {
            System.out.println("命令A的功能逻辑");
            Receiver.read();
        }
    }

    public static class CommandB implements Command {
        private   Receiver Receiver;

        public CommandB(CommandPatternDemo.Receiver receiver) {
            Receiver = receiver;
        }
        public void execute() {
            System.out.println("命令B的功能逻辑");
            Receiver.write();
        }
    }

    public static class Invoker {
        private Command Command;

        public CommandPatternDemo.Command getCommand() {
            return Command;
        }

        public void setCommand(CommandPatternDemo.Command command) {
            Command = command;
        }

        public void execute() {
            Command.execute();
        }
    }
}

 

命令模式的适用场景
       对于大多数请求-响应模式的功能,比较适合使用命令模式,正如命令模式定义说的那样,命令模式对实现记录日志、撤销操作等功能比较方便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值