扫码关注公众号
讲一讲策略模式?
策略模式属于行为型模式,定义了一系列算法并封装起来,之间可以互相替换。策略模式主要解决在有多种算法相似的情况下,使用if/else所带来的难
策略模式的优缺点是什么?
优点1.策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为2.算法可以互相切换,无需知道算法的具体实现3.使用策略模式可以避免多重条件选择语句。多重条件选择语句是硬编码,不易维护4.可扩展性更好,可以灵活地增加新的算法或行为。也可灵活切换算法或者行为缺点1.使用策略设计模式会产生很多具体策略类,客户端每次只能使用一个策略类,不支持使用一个策略类完成部分功能后再使用另一个策略类来完成剩余功能的情况2.所有的策略类需要对外暴露.因为客户端只有知道有哪些策略,才知道应该是用哪个.这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法。换言之,策略模式只适用于客户端知道所有的算法或行为的情况
策略模式的使用场景是什么?
1、一个系统,需要动态的在几个算法之间选择,它们之间的区别仅仅是算法或者行为的不同,那么可以使用策略模式,这样我们可以动态地让一个对象在许多行为中选择一种行为。2、一个系统需要动态地在几种算法中选择一种。3、一个对象有很多的行为,如果不用策略设计模式,这些行为就只好使用多重条件选择语句来实现。而使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句。
讲一下策略设计模式实现的四步骤
1.策略接口类:是对策略,算法的抽象.定义了每个策略和算法必须有的算法和属性.2.策略实现类:策略,算法的具体实现.策略具体有几种类型的实现就定义几个策略类,并实现策略方法3.Context上下文类:Context上下文,起到承上启下的作用.屏蔽了上层模块对策略,算法的访问,封装了可能存在的变化.到底当前要调用那个策略,通过定义构造函数传参决定,策略方法可以没有入参,但必须有构造方法,构造方法决定类的实际策略.可扩展性强,增加新的策略,不需要动用老代码.4.客户端类:客户端调用Context上下文类,并指定要调用策略的类.所以,就要求用户提前知道有哪些策略类.