跳至主要內容
【设计模式】结构型-⑤桥接模式

学习核心

  • 桥接模式核心
    • 概念:将抽象部分和实现部分进行分离,将多种可匹配的使用进行组合(核心实现可以理解为A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥)
    • 组成:
      • A-抽象化角色:抽象化基类(引用实现化对象)、扩展抽象化
      • B-实现化角色:实现化接口、具体实现化接口
  • 应用场景
    • 【支付场景】:多种支付(支付宝、微信)和验证(指纹、人脸识别、密码)方式
    • 【数据库JDBC&DriverManager】:JDBC连接数据库,通过DriverManager加载指定数据库驱动程序进行桥接,获取相应的连接实例

holic-x...大约 6 分钟设计模式设计模式
【设计模式】行为型-⑤状态模式

学习核心

  • 状态模式核心
    • 概念:状态模式描述的是一个行为下的多种状态变更
    • 组成:
      • 状态枚举(Enum<Status>):定义业务流程中涉及到的状态
      • 抽象状态类(State):定义状态流转的操作方法
        • 对于一些场景,如果状态流转操作方法类似,也会考虑只定义一个方法进行简化,然后各自子类业务逻辑进行丰富,此处主要是让职责更清晰,所以拆分了多个流转方法
      • 具体状态类(xxxState):继承抽象状态类,实现当前状态对应操作方法的流转逻辑(如果不涉及当前状态操作则可忽略不实现或者提示操作非法)
      • 状态服务类(StateHandler):提供统一的状态流转服务管理,维护了状态枚举和具体状态类的关联,通过其提供的方法入口调用相应的流转方法
  • 应用场景分析
    • 【BPM流程】审核状态流转场景:营销活动上线的状态流转

holic-x...大约 11 分钟设计模式设计模式
【设计模式】行为型-④责任链模式

学习核心

  • 责任链模式核心
    • 概念:责任链是一条链,链上的每个节点多有各自的责任,当前责任节点会确认自己可否处理输入,如果不能就交给下一个责任节点进行处理,以此类推直到最后一个责任节点
    • 构成:处理者(接口定义)、基础处理者(可选)、具体处理者
      • 处理者(Handler):接口定义(一些场景中会考虑直接将Handler定义为抽象类,提供一些通用的方法
      • 基础处理者(BaseHandler):这是一个可选的抽象类设计,可将一些公共的处理样本代码放至其中
      • 具体处理者(ConcreteHandlers):实现接口,定义具体的请求处理逻辑(handler)和指向链中下一个处理者的引用(next)
      • 客户端(Client):根据程序逻辑一次性或者动态生成链,请求可以发送给任意一个处理者,非必须是第一个处理者
  • 应用场景分析
    • 【BPM业务流程多级审批相关】:【上线流程审批】、【请假流程审批】等
    • 【Spring框架】:Spring 框架的异常处理机制采用责任链模式
    • 【JavaWeb开发】:过滤器、拦截器实现
    • 【日志记录等级】:根据配置的日志等级,打印日志信息

holic-x...大约 10 分钟设计模式设计模式
【设计模式】行为型-③模板方法模式

学习核心

  • 模板方法模式核心
    • 概念:抽象类中定义抽象方法的执行顺序和基本策略,子类可以在方法中实现自己的业务逻辑(相当于把业务执行策略安排得明明白白)
      • 父类定义抽象方法执行策略(规定好一系列的执行标准,由这些标准串成一整套业务流程)
    • 组成:抽象父类(抽象模板)、具体子类(策略扩展实现)
      • 抽象父类(抽象模板):定义业务执行顺序和基本策略
      • 具体子类(策略扩展实现):子类可继承基本策略,并且可扩展方法实现
  • 应用场景分析
    • 【电商场景】模拟爬虫电商商品、生成营销推广海报:模拟登录、模拟爬取、生成海报
    • 【OJ】模拟沙箱:OJ 项目中模拟沙箱进行题目解析的步骤设定(构建一个核心的流程执行顺序和基本策略)

holic-x...大约 6 分钟设计模式设计模式
【设计模式】行为型-②策略模式

学习核心

  • 代理模式核心
    • 概念:将算法与使用算法的代码进行解耦,提供一种动态选择不同算法的方法
    • 组成:抽象策略(Abstract Strategy)、具体策略(Abstract Strategy)、环境(Context)
      • 抽象策略(Abstract Strategy):定义公共接口或抽象类
      • 具体策略(Concrete Strategy):定义策略的具体实现算法
      • 环境(Context):维护对一个策略对象的引用,负责将客户端的请求委派给具体的策略对象执行
  • 应用场景分析
    • 【营销场景】不同折扣活动策略:例如某个活动设定了不同的优惠券类型,根据相应的类型实施优惠策略,计算折扣后的金额

holic-x...大约 8 分钟设计模式设计模式
【设计模式】结构型-①观察者模式

学习核心

  • 观察者模式核心
    • 概念:一个行为发生时传递信息,然后由另一个用户接收并做出相应处理。支持动态添加、移除监听事件(接收者可以动态订阅、取订事件)
    • 组成:事件监听(监听者)、事件处理(监听管理器)
      • 事件监听:EventListener(接口定义)和对应的监听实现类xxxEventListener
      • 事件处理:EventManager事件管理类定义,提供添加事件监听、移除事件监听、执行事件三个方法
  • 应用场景分析
    • 【MQ】消息服务场景:行为发生->传递消息->消息处理,这也是一种基于观察者模式的设计思路

    • 【事件监听】

      • 事件监听总线:一些业务场景中为了提升应用性能,会将主线服务和其他业务服务进行分离,为了降低两者间的耦合度,会采用观察者模式进行处理
      • JAVA的Swing、GUI的组件事件监听:Listener机制(例如GUI、Swing按钮等事件监听)
      • Redis的哨兵模式更新主节点的通知机制:Redis中哨兵模式下更新主节点的消息通过发布订阅模式进行消息传递以更新关系,也可以理解为从节点订阅了相关信息,当监听到有相应事件发生时做出相应的操作
    • 【小汽车摇号】场景:摇号业务通知场景(摇号(主业务)+ 通知(MQ、Message 辅线业务))

      • 原始实现流程:模拟摇号(核心主链路)=》辅助链路:模拟发短信、模拟发MQ消息等 =》返回摇号结果
      • 观察者模式优化:将主、辅进行分离,通过监听/观察主线路事件(模拟摇号)触发辅线事件(通知结果)发生

holic-x...大约 10 分钟设计模式设计模式
【设计模式】结构型-④代理模式

学习核心

  • 代理模式核心
    • 概念:使用代理对象(proxy object)来代替对真实对象(real object)的访问,在不修改原目标对象的基础上提供额外的功能操作,扩展目标对象的功能
    • 组成:代理对象、被代理对象
      • 主题(Subject):抽象主题(Abstract Subject)、真实主题(Real Subject)、代理主题(Proxy Subject)
        • 抽象主题:定义了真实主题和代理主题的公共接口
        • 真实主题:基础业务功能实现
        • 代理主题:在不改变原有业务代码的基础上进行扩展实现
      • 客户端(Client):通过抽象主题来操作真实主题或代理主题
  • 应用场景分析
    • 【MyBatis框架】:定义接口,通过XML配置文件或者自定义注解中的SQL语句进行CRUD操作

    • 【中间件】:例如RPC框架,在获取到jar包对接口的描述之后,中间件会在服务启动的时候生成相应的代理类,当调用接口时实际是通过代理类发出的socket信息进行调用

    • JS的【图片加载】场景、图片二次处理场景

      • 缓存代理:一些网络图片交互场景下,先将图片预先加载到本地缓存中,当要进行访问的时候直接访问本地缓存信息,而不需重复从服务器中拉取;
      • 虚拟代理:例如一些图片加载比较大的情况下,先用loading图片进行占位然后异步加载图片信息,待图片信息加载完成之后再刷新图片数据
      • 图片二次处理场景:通过代理对图片进行二次处理(水印渲染、加解密、图片权限访问控制等)
    • 【AOP】场景:所谓AOP面向切面编程,其底层本质也是通过代理方式实现对功能的横向扩展


holic-x...大约 3 分钟设计模式设计模式
【设计模式】结构型-④注册器模式

学习核心

  • 注册器模式核心(单例模式的特例化)
    • 概念:在APP中全局注册对象供其他对象使用,常用于管理和维护一组单例的全局对象(涉及注册对象、注册器两个角色)
    • 组成:注册对象、注册器
  • 业务场景案例:在应用程序中全局注册一些对象,便于被其他对象发现和使用,常用于管理和维护一组单例的全局对象
    • 【search-platform】数据源注册器:【search-platform】中通过定义不同类型的检索数据源(post、user、picture),动态注册,根据type获取不同数据源(替换传统if...else...、switch 语句)

holic-x...大约 6 分钟设计模式设计模式
【设计模式】结构型-③门面模式

学习核心

  • 门面模式核心

    • 概念:提供统一接口,用于访问一组子系统的功能(例如酒店门面对接,说需求然后达到相应目的),门面负责统一对接、分发请求,用户不需要关注背后的逻辑
    • 组成:门面角色、子系统角色(一个或多个)
  • 应用

    • 【search-platform】聚合接口:提供聚合接口(统一搜索入口),减少接口交互、简化交互成本,提升应用性能

holic-x...大约 3 分钟设计模式设计模式
【设计模式】结构型-②装饰器模式

学习核心

  • 装饰器模式核心
    • 概念:对比原有通过继承进行功能扩展的方式实现,装饰器模式可以在不修改现有代码的情况下通过添加装饰器来扩展对象的功能
    • 组成:
      • 简化版本:被装饰对象、装饰者(构造器中接收被装饰对象进行属性填充)
      • 抽象版本:被装饰对象接口、被装饰对象实现类、装饰者抽象类(作为抽象基类,实现被装饰对象接口,重写子类方法)、装饰者具体类
  • 业务场景案例
    • 【JAVA中的IO流】(也可以从BIO、NIO、AIO的演进进行理解):Writer->TextWriter->BufferTextWriter

holic-x...大约 5 分钟设计模式设计模式