首页 > 代码库 > 设计模式之策略模式
设计模式之策略模式
策略模式将可变的部分从程序抽象分离成算法接口,在该接口下分别封装一系列算法实现。这样不同的算法之间可以互相替换,使客户端可以独立这些算法。
根据面向对象的编程思想,我们通常会采用以下方式解决问题。
- 继承父类
优点:相同场景下代码复用率高
缺点:容易忘记代码的复写,不灵活,不同场景下代码复用率低
- 抽象
优点:由子类覆写父类的抽象方法,比较灵活
缺点:代码复用率低
- 组合
"组合优先于继承"。在类中增加一个私有域,引用另一个已有类的实例,通过调用引用实例的方法获得新的功能,这种设计成为组合。
优点:代码复用率高,易于维护;架构灵活;富有弹性,可以较好适应变化,"开闭原则";消除大量条件语句;
缺点:在客户端程序中需要注入一个具体的strategy算法实现类,客户代码需要了解每一个策略实现的细节;增加了对象的数目。
策略模式的设计原则
- 我们找出需求中需要变化的部分,将它们独立出来,而不是与其他代码混合在一起。
- 面向接口,而不是面向实现编程。通过多态的方式,来适配不同的处理方式。
- 多用组合,少用继承。
策略模式实现步骤
- 通过分离变化得到策略接口strategy
- 为策略接口提供实现类
- 客户端程序持有该策略接口
- 在客户端程序中正确选择并组装调用strategy的实现类
使用场景
- 许多相关的类仅仅是行为差异
- 运行时选择不同的算法变体
- 通过条件语句在多个分支中取其一
设计模式之策略模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。