Java 命令模式

本文详细介绍了命令模式的概念,包括其定义、优点、缺点以及在代码中的具体实现方式。通过一个具体的例子,展示了如何使用命令模式来降低行为发送者与执行者之间的耦合度,以及如何在代码中新增命令。

命令模式定义:

         将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。所以命令模式也被称为动作action模式或者事物transaction模式。

命令模式的优点:

       1.降低了行为发送者和行为执行者之间紧耦合的关系。

       2.新的命令容易添加到代码里去。

命令模式的缺点:

       1.会使类的数量增加。

命令模式的角色:

        1.抽象命令类:它可能是一个抽象类或者接口,它抽象出关于命令的业务方法。

        2. 具体命令类:它实现了抽象命令的方法,具体化抽象命令类的而业务方法。

        3.请求发送者:它通过命令对象来执行请求,它不需要在设计时就知道请求的接收者,它只要与抽象类存在关联,在程序的运行过程中,它通过调用命令角色的方法,(命令类又与请求的接收者存在关联)间接调用了请求的接收者的相关动作。

       4.请求接收者:接收者执行与请求相关的操作,实现对请求业务的处理。

下面我以于谦发一个叫郭德纲自我介绍的命令为例,来介绍命令模式:

 

/**
 *抽象命令角色
 * Created by  Administrator
 */

public abstract class Command {
    Receiver receiver;

    public Command(Receiver receiver) {
        this.receiver = receiver;
    }
    public abstract void Execute();
}
/**
 *具体命令角色
 * Created by  Administrator
 */
public class ConcreteCommand extends Command {
    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

    @Override
    public void Execute() {
        //具体命令角色含有命令接收者的引用,调用命令接收者的执行命令的业务方法
        receiver.action();
    }
}
/**
 *命令请求者(下达命令着)
 * Created by  Administrator
 */
public class Invoker {
    //命令请求者含有命令类的相关引用
    private Command command;

    public Invoker(Command command) {
        this.command = command;
    }

    public void ExecuteCommand(){
        //命令请求者通过调用命令类的相关的业务方法,间接调用命令接收者执行命令的业务方法
        command.Execute();
    }
}
/**
 *命令接收者
 * Created by  Administrator
 */
public class Receiver {
    public void action(){
        Log.d("Command", "观众朋友们,大家好,床前明月光,疑是地上霜.举头望明月,我叫郭德纲");
    }
}

 

客户端调用:

Receiver receiver=new Receiver();
Command command=new ConcreteCommand(receiver);
Log.d("Command","观众朋友们,大家好,我叫于谦,我身旁的这位给大家介绍下自己吧");
Invoker invoker=new Invoker(command);
invoker.ExecuteCommand();

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值