策略模式

本文介绍了策略模式,一种行为设计模式,用于定义一系列算法并封装起来,使它们可以互换。策略模式允许在运行时切换算法,适用于需要根据不同条件执行不同算法的场景。文章讨论了模式的优缺点,如代码解耦、运行时行为切换和开闭原则的遵循,但也指出当算法变化不频繁时引入策略模式可能导致过度复杂化。同时,文章对比了策略模式与其他设计模式,如命令模式、桥接模式、状态模式和装饰者模式的区别。
摘要由CSDN通过智能技术生成

今天是2021-2-25。

一。策略模式简介

1.策略模式(Strategy Pattern)是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。策略模式定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
2.简单来说,对于同一个问题的不同解决方式类,提供一个统一的接口供外部使用。
3.在策略模式中,通常有一个通用接口Strategy,我们定义的不同算法都会实现这个接口。接下来,对于解决某种问题的算法,就需要定义一个管理器类,这个管理器类会持有一个存储Strategy类型的list集合(根据需求也可以使用map或者set)–存储解决该类问题的所有算法策略。
4.通过这个集合,你就可以进行各种操作:遍历集合,查找能够处理传入对象的策略;根据id获取某个策略;给集合中设置新的策略。
5.使用时,我们的业务类就可以通过管理器类的对象操作策略集合了。
6.可以说,策略模式与工厂模式还是比较像的,只不过工厂模式注重返回不同对象,而策略模式注重对策略的管理与操作。
在学习尚硅谷springboot2时,就见识了大师优雅的代码,下面附上简单流程:

1.解析参数时,策略类通用接口HandlerMethodArgumentResolver

/**
 * Strategy interface for resolving method parameters into argument values
 * in the context of a given {@link Message}.
 *
 * @author Rossen Stoyanchev
 * @since 4.0
 */
public interface HandlerMethodArgumentResolver {
   

	/**
	 * Whether the given {@linkplain MethodParameter method parameter} is
	 * supported by this resolver.
	 * @param parameter the method parameter to check
	 * @return {@code true} if this resolver supports the supplied parameter;
	 * {@code false} otherwise
	 */
	boolean supportsParameter(MethodParameter parameter);

	/**
	 * Resolves a method parameter into an argument value from a given message.
	 * @param parameter the method parameter to resolve.
	 * This parameter must have previously been passed to
	 * {@link #supportsParameter(org.springframework.core.MethodParameter)}
	 * which must have returned {@code true}.
	 * @param message the currently processed message
	 * @return the resolved argument value, or {@code null}
	 * @throws Exception in case of errors with the preparation of argument values
	 */
	@Nullable
	Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception;

}

2.参数解析策略的管理器类HandlerMethodArgumentResolverComposite ,里面就是对参数解析器集合的各种操作

ublic class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver {
   
    //参数解析器集合
	private final List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList<>();

	private final Map<MethodParameter, HandlerMethodArgumentResolver> argumentResolverCache =
			new ConcurrentHashMap<>(256);


	/**
	 * Add the given {@link HandlerMethodArgumentResolver}.
	 */
	public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver resolver) {
   
		this.argumentResolvers.add(resolver)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值