设计模式--策略模式
当我遇上你csy 人气:0
# 1. 概述
策略模式(Strategy Pattern)是比较典型的对象行为型模式,它是将对处理对象的一系列不同算法都单独抽离出来,单独封装成一个个类。策略的出现,主要是为了解决不同算法替换时的逻辑判断,**将逻辑判断移到 Client 中去(即由客户端自己决定在什么情况下使用什么具体策略)**。
# 2. 模式结构
策略模式包含如下角色:
- Context: 环境类,也叫做上下文角色,起承上启下封装作用; 屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化.
- Strategy: 抽象策略类,策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性
- ConcreteStrategy: 具体策略类,实现抽象策略中的操作,含有具体的算法
![](https://gitee.com/idea360/oss/raw/master/images/Strategy-Pattern.jpg)
# 3. 适用环境
在以下情况下可以使用策略模式:
- 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
- 一个系统需要动态地在几种算法中选择一种。
- 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
- 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。
# 4. 典型案例
学习设计模式就是为了写出更加优雅的代码, 然而很多时候项目中不知道在什么场景下用什么设计模式合适。这里提供几个案例, 让大家在实践中去理解应用, 去悟道。
## 4.1 JDK 排序比较器
首先最经典的就是 JDK 中排序器的应用了。
策略接口
```java
@FunctionalInterface
public interface Comparator
加载全部内容