设计模式-09

举报
kwan的解忧杂货铺 发表于 2024/05/15 06:39:44 2024/05/15
【摘要】 九.审计日志和 es 滚动查询 1.模版方法模式模板方法模式确实非常简单,仅仅使用了 Java 的继承机制,但它是一个应用非常广泛的模式。其中,AbstractClass 叫做抽象模板,它的方法分为两类:基本方法:基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。注意 为了...

九.审计日志和 es 滚动查询

1.模版方法模式

模板方法模式确实非常简单,仅仅使用了 Java 的继承机制,但它是一个应用非常广泛的模式。其中,AbstractClass 叫做抽象模板,它的方法分为两类:

  • 基本方法:基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。
  • 模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。

注意 为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆写。

image-20230730130914193

2.需求

项目需求:公司 财务、审计、法务部门需要记录用户关键核心日志,防止日后未知的纠纷。

要求:

  1. 该日志记录不是普通的日志记录,不同的日志记录内容可能不一样

  2. 可以灵活增加日志种类和处理;

  3. 核心日志包括: 登录; 订单创建; 订单支付。其中订单创建需要有相关产品信息;订单支付需要有相关产品信息以及支付方式和支付金额。

  4. 日志组装完成后,将日志信息发送到 queue 中,会由数据处理部门进行处理。

image-20230730131309334

3.使用总结

  1. 创建日志的实体类;
  2. 创建日志的抽象类,编写抽象方法,和不被复写的方法;
  3. 编写日志,订单,支付日志处理器,复写自己的详细的 detail 信息;
  4. 使用到了模版方法模式;

4.迭代器模式

  • Iterator 抽象迭代器 抽象迭代器负责定义访问和遍历元素的接口
  • ConcreteIterator 具体迭代器 具体迭代器角色要实现迭代器接口,完成容器元素的遍历。
  • Aggregate 抽象容器 容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似 createIterator()这样的方法,在 Java 中一般是 iterator()方法。
  • Concrete Aggregate 具体容器 具体容器实现容器接口定义的方法

image-20230730180906366

5.需求

项目需求:数据从 mysql 迁移至 Es,Es 数据查询的默认 fetchSize 最大为 10000. 如果查询超过 10000 条数据,需要通过 scroll 形式进行查询。

要求:

  1. 出于安全问题考虑,查询需要直连 ES-ip:9200, 不可使用第三方 Jar 包。

  2. 由于目前项目的查询方式是基于 mysql 的,为了减少改动,暂时使用 SQL 语句查询,ES-IP:9200/_sql

  3. 我们需要将结果以 stream 的形式进行返回。(避免我们的内存占用过大以及瞬时的网络带宽问题。)

image-20230730181638104

6.使用总结

  1. 创建查询条件类和结果类;
  2. 创建迭代查询处理器,里面封装了迭代的逻辑;
  3. 使用到了迭代器模式;
  4. 迭代器模式场景较为特殊;

7.第三方账号登录原理

自建账号体系的注册和登录,对用户来讲,过程很繁琐,结果 很多用户并不想注册你开发的网站或 APP, 所以用户量增长缓慢。此时可考虑用第三方账号登录,比如微信登录和 QQ 登录。

当用户点击第三方登录时,会跳转到第三方登录 SDK 内部;用户输入第三方登录用户名或密码,有些第三方登录平台,可以直接调用已经登录的账号,例如:QQ;完成第三方平台登录的;登录完成后,第三方平台,或者 SDK
会回调我们的应用,在回调的信息里面,可以拿到用户在第三方平台的 OpenId,以及昵称,头像等信息。

8.桥接模式

桥接模式,是一个比较简单的模式。

  • Abstraction——抽象化角色 它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
  • Implementor——实现化角色 它是接口或者抽象类,定义角色必需的行为和属性。
  • RefinedAbstraction——修正抽象化角色 它引用实现化角色对抽象化角色进行修正。
  • ConcreteImplementor——具体实现化角色 它实现接口或抽象类定义的方法和属性。

image-20230730185859098

桥梁模式的优点:

  • 抽象和实现分离
  • 优秀的扩充能力
  • 实现细节对客户透明

9.多种类第三方账号登录

使用桥接模式

项目需求:为了简化用户的登录注册流程,允许用户直接使用经过授权的第三方账号登录网站。

要求:

  1. 遵循开闭原则:可以新增抽象部分和实现部分,且它们之间不会互相影响。
  2. 遵循单一职责原则:抽象部分专注于处理高层逻辑,实现部分处理平台细节。

image-20230730185747353

image-20230730190256364

10.使用总结

  1. 创建登录接口;
  2. 支付宝登录,微博登录实现登录接口;
  3. 创建登录处理器抽象类,构造器需要登录接口,提供执行登录的抽象方法;
  4. 封装到第三方类的处理中,对外暴露抽象类,屏蔽接口实现细节;
  5. 使用到了桥接模式;
  6. 第三方登录也可以使用适配器模式;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。