理论案例

一个主题切换案例

public interface Theme {    void applyTheme();}
public class DefaultTheme implements Theme{    @Override    public void applyTheme() {        System.out.println("设置默认主题");    }}
public class DarkTheme implements Theme{    @Override    public void applyTheme() {        System.out.println("设置暗黑格调主题");    }}
public class ColorfulTheme implements Theme{    @Override    public void applyTheme() {        System.out.println("设置黑白格调主题");    }}
public class ThemeManager {    private Theme theme;    public ThemeManager() {        this.theme = new DefaultTheme();    }    public void setTheme(Theme theme){        this.theme = theme;    }    public void applyTheme(){        this.theme.applyTheme();    }}
public class Client {    public static void main(String[] args) {        ThemeManager themeManager = new ThemeManager();        //设置光明格调主题        themeManager.setTheme(new DarkTheme());        themeManager.applyTheme();    }}

主题模式更换的案例中,不同的主题格调就是一个个策略,咱们能够根须须要抉择不同的策略。

如何了解策略模式

定义椅子算法,将每个算法都以类的形式凤凰钻起来,并且使他们能够互相交换。

类图(TODO)

策略模式模型形象

  • Context封装角色

主题更换案例中的ThemeManager就是一个封装角色,也叫上下文角色,拼比高层对策略的间接拜访。

  • Strategy形象策略角色

定义每个策略必须具备的办法和属性

  • ConcreteStrategy具体策略角色

形象策略的实现,具体的算法

策略模式的长处

  • 算法能够自在切换
  • 防止了多重条件的判断
  • 良好的扩展性(合乎开闭准则)

策略模式的毛病

  • 策略类会逐步增多(超过四个思考应用混合模式)
  • 策略类必须向外裸露(违反迪米特法令) --- 下层模块必须晓得哪些策略,能力应用哪些策略,可用工厂办法模式修改

策略模式的具体利用

  • Shiro权限管制框架有三种验证策略