设计模式——策略模式

147 阅读2分钟

二、策略模式 Strategy

策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算 法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法 在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算 法,可以理解为不同的业务处理方法。

优点:它将算法的使用和算法本身分离,即将变化的具体算法封装了起来,降低了代码的耦合度,系统业务策略的更变仅需少量修改。 算法被提取出来,这样可以使算法得到重用,这种情况还可以考虑使用享元模式来共享算法对象,来减少系统开销。

结构:

算法使用环境 :算法被引用到这里与有关的操作一起实现业务

策略接口:用于调用具体策略

具体策略:实现策略接口

image-20220112162959907.png

使用场景:

  1. 系统需要能够在几种算法中快速的切换。(不再需要为每个场景重写算法)
  2. 系统中有一些类它们仅行为不同时,可以考虑采用策略模式来进行重构
  3. 系统中存在多重条件选择语句时,可以考虑采用策略模式来重构。(策略模式相当于把不同策略封装起来)

例子:布局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);
} 

\