您的位置:首页 > 房产 > 家装 > 设计模式之策略模式

设计模式之策略模式

2025/1/9 4:01:16 来源:https://blog.csdn.net/qq_58076226/article/details/140547882  浏览:    关键词:设计模式之策略模式

 1、什么是策略模式

         将类中经常改变或者可能改变的部分提取作为一个抽象策略接口类,然后在类中包含这个对象的实例,这样类实例在运行时就可以随意调用实现了这个接口的类的行为

         比如定以一系列的算法,把每一个算法封装起来,并且使可以相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式

       1、环境类(Context):通过ConcreteStrategy具体策略来配置,持有Strategt对象并维护对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据

        2、抽象策略类(Strategy):定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法

        3、具体策略(ConcreteStrategy):Strategy接口的具体算法         

2、代码 

促销活动

  环境类

public class CuXiaoContext {private CuXiao cuXiao;public CuXiaoContext(CuXiao cuXiao) {this.cuXiao = cuXiao;}//定义一个使用算法的方法public void use(){cuXiao.cuxiao();}
}

抽象策略类 

public interface CuXiao {void cuxiao();
}

具体策略类

   6.18 

public class SuanFa618 implements CuXiao {@Overridepublic void cuxiao() {System.out.println("使用6.18的促销算法");}
}

  11.11

public class SuanFa1111 implements CuXiao{@Overridepublic void cuxiao() {System.out.println("使用11.11的促销算法");}
}

 测试

public class CuXiaoTest {public static void main(String[] args) {//SuanFa618 suanFa618 = new SuanFa618();SuanFa1111 suanFa1111 = new SuanFa1111();CuXiaoContext context = new CuXiaoContext(suanFa1111);context.use();}
}

3、策略模式优缺点  

优点:

        1、算法可以自由切换(策略类自由切换)

        2、避免使用多重条件判断

        3、扩展性良好 (符合开闭原则)

缺点:

        1、策略类会增多(导致类爆炸)

        2、所有策略类都需要对外暴露

        3、客户端必须知道所有的策略类,才确定要调用的策略类

 4、策略模式使用场景

         1、如果在以一个系统里面又许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为

        2、一个系统需要动态地在几种算法中选择一种

        3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com