策略模式(Strategy Pattern)
定义:Define a family of algorithms,encapsulate each one,and make them
interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)
角色组成:
- 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起
来完成任务。 - 抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在 java 它通常由接口
或者抽象类来实现。 - 具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。
举例
在 Java 语言中对策略模式的应用是很多的,我们这里举个布局管理器的例子。
在java.awt 类库中有很多种设定好了的 Container
对象的布局格式,这些格式你可以在创建软件界面的时候使用到。如果不使用策略模式,那么就没有了对布局格式扩展的可能,因为你要去修改
Container 中的方法,去让它知道你这种布局格式,这显然是不可行的。让我们来看看 java 源码中的实现吧。
先来看看 Container 中有关的代码:
LayoutManage