设计模式(九)命令模式

命令模式场景:
当不同需求需要不同的实例进行执行,或者一个需求需要不同实例共同合作执行,但是需求者不太想和具体的实现者一一打交道,就可以把需求封装成一个命令,把命令传给一个执行者,执行者接到命令后,执行命令,并把具体的如何执行交给具体的命令本身。 具体的命令本身具体组合实际执行者,编排流程等。

命令模式是一个高内聚模式。在这里插入图片描述

  • Receiver : 具体的执行者
  • Command : 需要执行的命令在此声明
  • Invoker: 接到命令执行命令。
    通用Receiver
public abstract class Receiver{
	public abstract void doSomthing();
}

具体Receiver

public  class ConcreteReceiver1{

		@Override
		public void doSomthing(){
			//TODO
		}
}

通用Command

public abstract class Command{
	public abstract void execute();
}

具体Command

public  class ConcreteCommand1{
		private Receiver receiver;
		public ConcreteCommand1(Receiver receiver){
			this.receiver=receiver;
		}
		@Override
		public void execute(){
			this.receiver.doSomething();
		}
}

Invoker

publ;ic class Invoker{
	private Command command;
  public void setCommand(Command command){
		this.command=command;
	}
  public void action(){
		this.command.execute();
	}
}
public class Client {

    public static void main(String[] args){

        Invoker invoker=new Invoker();
        
        Receiver receiver=new ConcreteReceiver();
        
        Command command=new ConcreteCommand();
        
        invoker.setCommand(command);
        
        invoker.action();
        
    }
}

命令模式的优点

  • 类间解耦。 调用者和接受者之间没有依赖,通过调用Command的execute方法执行,不需要了解到底是哪一个接收者执行
  • 可扩展性。 Command的子类易于扩展。Invoker和高层模块Client 没有严重的代码耦合。
  • 命令模式结合责任链模式,结合模板模式可以组合设计更好的模式。

缺点

Command可能会膨胀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值