行为型-策略模式

注入对象,改变行为。
这是一个很有意思的模式,它可以有多种表现形式,只要满足注入对象,改变行为
学习这个模式,必须忘记网上和书上的标准类图。

案例 Comparator: Arrays.sort(T[], Comparator)

注入不同的Comparator,排序的方式也不同。
这是最常见的策略模式的表现形式,没必要画什么图。

案例 Spring 后置处理器: applyBeanPostProcessorsBeforeInstantiation

与上一个策略模式比较,有点主客颠倒的意思。

	protected Object applyBeanPostProcessorsBeforeInstantiation(Class<?> beanClass, String beanName) {
		// 遍历所有的处理器,不同的处理器就是不同的策略
		for (BeanPostProcessor bp : getBeanPostProcessors()) {
			// 但是必须满足以下条件的策略才能被执行,这就叫策略模式。
			// 他动态的选择策略,改变行为。
			if (bp instanceof InstantiationAwareBeanPostProcessor) {
				InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;
				Object result = ibp.postProcessBeforeInstantiation(beanClass, beanName);
				if (result != null) {
					return result;
				}
			}
		}
		return null;
	}

如果要实现新的策略,只需写个bean,或者动态的决定要不要加载自己写的bean。

案例 spring ApplicationContextAware

通过实现接口,改变类的行为和状态。
这种形式的策略和第一个案例类似。
由Spring负责在运行期间调用setApplicationContext方法,至于调用它干什么,你自己决定。

案例 spring @Enable XXX

通过在 spring 能扫描到的类上加上 @Enable XXX 注解,就会自动导入相应的功能。


大多数书籍和网上的帖子,只有第一种形式的标准类图。对于策略模式,只需要记住一句话:注入对象,改变行为。重点不在注入对象,重点在改变行为,注入对象只不过是改变行为的一种手段,是可以泛化的,可以做扩展解释的,比如之后的案例,虽然也是注入对象了,但并不像第一案例那样直截了当。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值