策略模式

一、策略模式概述

在策略模式中使用的一些面向对象(OO)原则:封装变化,多用组合,少用继承;针对接口编程,不针对实现编程。

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。此模式让算法的变化独立于使用算法的客户。

策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。


策略模式涉及到三个角色:

环境角色(context):持有一个Strategy的引用。

抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需要的接口。

具体策略角色(Concrete Strategy):包装了相关的算法或行为。

二、案例代码

策略模式上下文:

抽象策略类:

具体策略类:

客户端调用:

三、策略模式的优缺点

1、优点

(1)算法可以自由切换

(2)避免使用多重条件判断

(3)扩展性良好

2、缺点

(1)策略类会增多

(2)所有策略类都需要对外暴露

3、适用场景

(1)当一个系统中有许多类,他们之间的区别仅在于他们的行为,希望动态的让一个对象在许多行为中选择一种行为时。

(2)当一个系统需要动态地在几种算法中选择一种时。

(3)一个对象有很多行为,不想适用多重的条件选择语句来选择使用哪个行为时。

四、应用场景

Java对象排序中的应用:Comparator外部比较器接口

抽象策略类:

具体策略类:

策略模式上下文调用:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容