二、策略模式 Strategy
策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算 法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法 在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算 法,可以理解为不同的业务处理方法。
优点:它将算法的使用和算法本身分离,即将变化的具体算法封装了起来,降低了代码的耦合度,系统业务策略的更变仅需少量修改。 算法被提取出来,这样可以使算法得到重用,这种情况还可以考虑使用享元模式来共享算法对象,来减少系统开销。
结构:
算法使用环境 :算法被引用到这里与有关的操作一起实现业务
策略接口:用于调用具体策略
具体策略:实现策略接口
使用场景:
- 系统需要能够在几种算法中快速的切换。(不再需要为每个场景重写算法)
- 系统中有一些类它们仅行为不同时,可以考虑采用策略模式来进行重构
- 系统中存在多重条件选择语句时,可以考虑采用策略模式来重构。(策略模式相当于把不同策略封装起来)
例子:布局Container
LayoutManager layoutMgr; //对布局管理器接口的引用
//获得在使用的具体布局管理器
public LayoutManager getLayout() {
return layoutMgr;
}
//设置要使用的具体布局管理器
public void setLayout(LayoutManager mgr) {
layoutMgr = mgr;
if (valid) {
invalidate();
}
}
public interface LayoutManager {
void addLayoutComponent(String name, Component comp);
………
Dimension minimumLayoutSize(Container parent);
void layoutContainer(Container parent);
}
\