目录

行为型:策略模式

释义

策略模式,制定多种策略,主体对象根据需要使用不同的策略。

/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%EF%BC%9A%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.resources/8F1DF5BD-1C53-4B1B-A38A-42E2B564A1A2.png
策略模式
主体类Subject中使用各种策略类AddStrategySubStrategy,按需执行策略类中的策略或更换策略。

策略类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
interface Strategy {
    fun operation(param1: Int, param2: Int)
}

class AddStrategy : Strategy {
    override fun operation(param1: Int, param2: Int) {
        return param1+param2
    }
}

class SubStrategy : Strategy {
    override fun operation(param1: Int, param2: Int) {
        return param1-param2
    }
}

主体对象

1
2
3
4
5
6
7
8
class Subject(
    var strategy: Strategy
) {
    // 执行策略
    fun executeStrategy(param1: Int, param2: Int) {
        strategy.operation(param1, param2)
    }
}

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
fun main() {
    // 参数
    val param1: Int = 1
    val param2: Int = 2
    // 策略类
    val addStrategy: AddStrategy = AddStrategy()
    val subStrategy: SubStrategy = SubStrategy()
    // 主体类
    val subject: Subject = Subject(addStrategy)
    
    // 执行策略
    subject.executeStrategy(param1, param2)
    // 更换策略
    subject.strategy = subStrategy
    // 执行新策略
    subject.executeStrategy(param1, param2)
    
}