一、概述
策略模式,从分类上讲,是23种设计模式中的一种行为设计模式。
策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。主要解决在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。举个栗子,出行方式有多种,我们可以根据距离选择飞机、高铁、汽车等不同的出行策略。
二、UML图
Context是上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用;
Strategy是策略类,用于定义所有支持算法的公共接口;
ConcreteStrategy是具体策略类,封装了具体的算法或行为,继承于Strategy。
三、代码例子
class StrategyContext(var strategy: Strategy) {
fun doStrategy(){
strategy.execuStrategy()
}
}
abstract class Strategy {
abstract fun execuStrategy()
}
class StrategyA: Strategy() {
override fun execuStrategy() {
Log.i("TAG","execute strategy A")
}
}
class StrategyB :Strategy() {
override fun execuStrategy() {
Log.i("TAG","execute strategy B")
}
}
fun test(){
var strategyContext:StrategyContext ?= null
strategyContext = StrategyContext(StrategyA())
strategyContext.doStrategy()
strategyContext = StrategyContext(StrategyB())
strategyContext.doStrategy()
}