面试必问设计模式之策略模式

147 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

设计模式系列文章目录

如果本文对你们的开发之路有所帮助,请帮忙点个赞,您的支持是我坚持写博客的动力

前言

本系列课程将带着大家以面试题的方式 深入设计模式。这么快到了设计模式的第五篇啦,上一篇文章带着大家输入学习了设计模式的工厂模式,这篇文章带着大家深入策略模式

项目代码见 gitee.com/janyxe/desi…

策略模式定义

Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)

策略模式是什么/策略模式概念

抽取共同行为,根据抽象策略实现不同的策略,交给不同的子类实现 策略模式主要解决多重条件判断的问题

能画出策略模式类图吗?并简单说明下

Java 三大特性:封装、继承、多态

策略模式使用的就是面向对象的继承和多态机制

  • Context 封装角色

    Context 封装角色也叫上下文角色。屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化

  • Strategy 抽象策略角色

​ 策略的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性

  • ConcreteStrategy 具体策略角色

​ 实现抽象策略中的操作,实现具体的算法

说说策略模式优缺点

优点

  • 避免多重条件(if)判断
  • 扩展性高(在不影响整体功能前提下添加删除算法)

缺点

  • 策略类增加,每实现一个策略都需添加策略类,复用性降低
  • 策略类都需对外暴露

策略模式应用场景

  • 算法需要灵活切换
  • 多个类都有公共的抽象行为,通过实现不同的算法/行为实现不同的场景

实现应用场景

  • 聚合支付场景(微信支付、支付宝支付、银联支付)
  • 联合登录(QQ登录、微信登录、钉钉登录、Github登录、手机号码登录)
  • 实现不同的短信发送渠道(腾讯云短信、阿里云短信)