概念与特点
概念:
策略模式就是一种对多重条件语句的封装,定义一系列算法,并将每个算法封装起来,使它们可以相互替换。算法的变化不会影响使用算法的客户。
特点:
- 策略模式可以避免使用多重条件语句。
- 策略模式提供一系列可供重用的算法族。
- 策略模式提供相同行为的不同实现。
- 策略模式把算法的使用放在环境中,而算法的实现放在不同的具体策略中。
- 策略模式会造成很多具体策略类。
结构与实现
策略模式包含抽象策略、具体策略和环境。
抽象策略:定义一个公共接口,不同的算法以不同的方式实现这个接口,环境类使用这个接口调用不同的算法。
具体策略:实现了抽象策略定义的接口,提供具体的算法实现。
环境:持有一个策略类的引用,可以设置或者获取某种策略类,最终给客户端调用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>React App</title>
</head>
<body>
<script>
//坐飞机出行-具体策略A
class Fly{
goOut(){
console.log("坐飞机出来旅行,好开心");
}
}
//做绿皮车出行-策略B
class Train{
goOut(){
console.log("坐绿皮车出来旅行,不开心");
}
}
//选择出行方式的人
class Person{
setOutWay(way){
this.way = way;
}
goOut(){
this.way.goOut();
}
}
class Customer {
static main() {
let jack = new Person();
jack.setOutWay(new Fly());//当然是选择坐飞机啦
jack.goOut();
}
}
Customer.main();
</script>
</body>
</html>
应用场景
- 一个系统需要在几种算法中动态地选择一种时,可将每种算法封装到具体策略中。
- 一个类中定义了多种行为,并且这些行为在这个类的操作中以多条件语句的形式出现,可将每个分支移植到具体策略类中代替条件语句。
- 系统中各算法完全独立,且要求对客户隐藏具体算法的实现细节。
- 多个类只区别在表现行为不同,可以选择策略模式,在运行时动态选择具体要实现的行为。
应用实例
暂无。
总结
当遇到多重选择的业务场景时,通常都会使用条件语句。但是当条件越来越多时,条件语句就会变得臃肿,难以维护,不易拓展。这时候使用策略模式就可以很好地将使用和实现分离。
【策略类】:
1、提供对应的业务方法。
【环境类】:
1、提供 setStrategy 设置策略类的方法。
2、提供业务方法,调用策略类的业务方法。