设计模式【03】——策略模式

参考《Java设计模式》、《设计模式之禅》、《headfirst设计模式》

目录

一、简介

二、使用策略模式

三、策略模式的优缺点

3.1 优点:

3.2 缺点:

四、使用场景及注意事项

4.1 使用场景

4.2 注意事项


一、简介

策略模式是一个计划或方式,给定一个输入条件,获得一个输出。通常策略会提供一组可互换的方法。

  • 提供一个接口,将不同的可互换的策略抽离出来,封装在各自独立的类来实现接口

使用背景:

  • 程序存在多种策略时,策略的选择和执行逻辑混合在一个方法时导致复杂度增加时,即可使用策略模式来简化。

 

二、使用策略模式

需要以下步骤:

  1. 创建一个接口来定义策略操作
  2. 分别用不同的类来实现该策略接口
  3. 重构代码,选择使用正确的策略类

例子:广告引擎之广告推荐

三、策略模式的优缺点

3.1 优点:

  1. 策略可以自由切换
  2. 避免使用多重条件判断:把判断选择策略的逻辑放到其他模块,策略家族只提供访问接口
  3. 扩展性良好

3.2 缺点:

  1. 策略类数量增多
  2. 所有的策略类都需要对外暴露
    1. 上层模块必须知道有哪些策略,才能决定使用哪个,与迪米特法则相违背。只使用了一个策略,为什么要知道其他策略呢?
    2. 解决方法:结合其他模式来修正该缺陷:如工厂方法、代理模式或者享元模式
    3. 备注:迪米特原则:迪米特原则简介

      迪米特法则(Law of Demeter, LoD)是1987年秋天由lan holland在美国东北大学一个叫做迪米特的项目设计提出的,它要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则(Least Knowledge Principle, LKP)。

四、使用场景及注意事项

4.1 使用场景

  1. 多个类只在策略或者行为上稍有不同
  2. 策略需要自由切换的场景
    1. 例如策略的选择由使用者决定,或者策略始终在金华
  3. 需要屏蔽策略规则的场景

4.2 注意事项

        如果策略数量超过4个,则需要考虑混合模式。实际项目中,一般通过工厂方法模式来实现策略类的声明

猜你喜欢

转载自blog.csdn.net/muyimo/article/details/106515837