命令模式学习

为什么命令模式?

我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。

命令模式角色

     ● Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作。

      ● ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法,它对应具体的接收者对象,将接收者对象的动作绑定其中。在实现execute()方法时,将调用接收者对象的相关操作(Action)。

      ● Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系。在程序运行时可以将一个具体命令对象注入其中,再调用具体命令对象的execute()方法,从而实现间接调用请求接收者的相关操作。

      ● Receiver(接收者):接收者执行与请求相关的操作,它具体实现对请求的业务处理。

以下为命令模式简单的实现:

/**
 * 调用者Invoke 和 Receiver接收者  通过Conmman 得到解耦
 * Receiver 接收者执行与请求相关的操作,它具体实现对请求的业务处理
 * Invoke 调用者即请求发送者,它通过命令对象来执行请求
 * @author huang
 *
 */
public class CommanTest {
	public static void main(String[] args) {
		Receiver receiver = new Receiver();
		Conmman conmman = new ConcreteCommand(receiver);
		Invoke invoke = new Invoke(conmman);   
		invoke.action();
	}
}
/**
 * 实现具体业务
 */
class Receiver {
  public  void action(){
	  System.out.println("通过命令执行调用者的请求");
  }
}
/**抽象模式
 */
interface Conmman{
	void excute();
}

/**具体命令,实现抽象命令,并指定接收者,去执行具体的方法
 */
class ConcreteCommand  implements Conmman{
	private Receiver receiver;
	public ConcreteCommand(Receiver receiver){
		this.receiver = receiver;
	}
	@Override
	public void excute() {
		receiver.action();
	}
	
}
/**
 * 请求发送者,只需要只与抽象命令类之间存在关联关系,不用知道要发给谁
 */
class Invoke{
	private Conmman conmman;
	public Invoke(Conmman conmman){
		this.conmman = conmman;
	}
	public void action(){
		conmman.excute();
	}
}

参考原文:https://blog.csdn.net/taozi8023/article/details/51452987

学习hystrix原理时,看到命令模式,想知道hystrix为什么要采用命令模式,所以记下笔记~

RPC框架的一个远程接口所定义的方法可能不止一个,为了更加细粒度的保护单个方法调用,命令模式就非常适合这种场景。命令模式的本质就是分离方法调用和方法实现,通过将接口方法抽象成HystricCommand的子类,从而获得安全防护能力,并使得的控制力度下沉到方法级别,参考文章:https://blog.csdn.net/liuxiao723846/article/details/79401325

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值