08-策略模式(Strategy)

定义:

定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化不会影响到使用算法的用户。

可以通过策略模式清除大量的if..else。

 

适用场景 

系统有很多类,而他们的区别仅仅在于他们的行为不同

一个系统需要动态地在几种算法中选择一种

 

优点:

满足开闭原则

避免使用多重条件转移语句

提高算法的保密性和安全性:只需要知道策略类是干什么的,而不需要知道具体实现

 

缺点:

客户端必须知道所有的策略类,并自行决定使用哪一个策略类

产生很多策略类

 

和其他模式的区别:

策略模式和工厂模式:工厂模式是创建型的设计模式,接受指令创建出符合要求的对应对象,而策略模式是行为型的,接受已经创建好的对象,从而实现不同的行为

策略模式和状态模式:策略模式是需要知道要挑选哪一种策略进行处理,而状态模式不需要知道具体的状态,会自动转换

 

如何消除if-else的判断?

可以通过把判断的逻辑视作为key,结合工厂模式和策略模式进行处理。

 

源代码:https://github.com/NoSuchClass/design_pattern/tree/master/src/behavioral/strategy

 

In JDK

interface Comparator<T>

比较器就是一个策略,每个具体的策略都需要实现这个接口下的方法

 

In Spring

interface Resource

也是一个策略,来进行加载各种不同位置的文件类型,比如常见的ClassPathContextResource

 

interface InstantiationStrategy

在Spring初始化bean的时候,也使用到了策略模式

这是Spring中InstantiationStrategy的两个实现,这两个实现并不是同级的,还存在策略与策略之间的继承关系

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值