JavaScript 23 种设计模式之 14 策略模式

JavaScript 23 种设计模式之 14 策略模式

概念与特点

概念:
策略模式就是一种对多重条件语句的封装,定义一系列算法,并将每个算法封装起来,使它们可以相互替换。算法的变化不会影响使用算法的客户。

特点:

  1. 策略模式可以避免使用多重条件语句。
  2. 策略模式提供一系列可供重用的算法族。
  3. 策略模式提供相同行为的不同实现。
  4. 策略模式把算法的使用放在环境中,而算法的实现放在不同的具体策略中。
  5. 策略模式会造成很多具体策略类。

结构与实现

策略模式包含抽象策略、具体策略和环境。
抽象策略:定义一个公共接口,不同的算法以不同的方式实现这个接口,环境类使用这个接口调用不同的算法。
具体策略:实现了抽象策略定义的接口,提供具体的算法实现。
环境:持有一个策略类的引用,可以设置或者获取某种策略类,最终给客户端调用。

<!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. 一个系统需要在几种算法中动态地选择一种时,可将每种算法封装到具体策略中。
  2. 一个类中定义了多种行为,并且这些行为在这个类的操作中以多条件语句的形式出现,可将每个分支移植到具体策略类中代替条件语句。
  3. 系统中各算法完全独立,且要求对客户隐藏具体算法的实现细节。
  4. 多个类只区别在表现行为不同,可以选择策略模式,在运行时动态选择具体要实现的行为。

应用实例

暂无。

总结

当遇到多重选择的业务场景时,通常都会使用条件语句。但是当条件越来越多时,条件语句就会变得臃肿,难以维护,不易拓展。这时候使用策略模式就可以很好地将使用和实现分离。

【策略类】:
1、提供对应的业务方法。

【环境类】:
1、提供 setStrategy 设置策略类的方法。
2、提供业务方法,调用策略类的业务方法。

猜你喜欢

转载自blog.csdn.net/weixin_44135121/article/details/106017494