理论案例
一个主题切换案例
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 权限管制框架有三种验证策略