NOTE
6.15 用过哪些设计模式
1. 创建型 1.1. 单例模式 解释一下? 一个类有且仅有一个实例 手写一下单例模式的实现? 单例模式.md /notes/software-engineering/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F/OOP/OOP%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E5%88%9B%E5%BB
这是历史学习笔记,可能存在过时或不完整的理解。
1. 创建型
1.1. 单例模式
解释一下? 一个类有且仅有一个实例
手写一下单例模式的实现? 单例模式.md 什么时候用过? Netty启动的时候
1.2. 原型模式
new一个对象需要很多数据准备,不如以原对象为原型,clone一份,再修改value
实现? 实现Cloneable接口,重写clone方法
什么时候用过? 通知系统发送通知时,需要把未读消息数和消息内容一起返回给前端,当时用的是浅 copy
1.3. 简单工厂
把类的创建和使用分离开
实现? map
什么时候用过? 配合单例、状态或者策略模式使用,根据不同的 action 返回不同的实现,例如通知、工单、对象存储、搜索等
1.4. 建造者模式
用于构建一个对象,这个对象由许多小对象组成,且流程复杂.如各种Builder.
实现? 模仿@Data
什么时候用过? UrlBuilder、ExcelBuilder、HTMLParser
2. 结构型
2.1. 外观模式
把复杂的流程封装到一个类中,比如各种util
实现?
什么时候用过 zookeeper的工具类
2.2. 装饰器模式
不改变原有代码的基础上为类增加新功能
什么时候用过? 参数检验和实际逻辑分开
3. 行为型
3.1. 模板方法
适用于某个算法整体步骤固定,某些部分易变化.可以把变化的部分抽象出来
实现? 抽象类定义一个方法,调用抽象的方法,子类实现抽象方法
什么时候用过? ElasticSearch搜索的时候,加入高亮等
3.2. 状态模式
一个对象有多种不同的status,且每种status有不同的action.
实现? 配合factory method,定义抽象类和抽象方法
什么时候用过? 通知系统 keepalive 等
3.3. 策略模式
根据不同的type选择不同的算法实现同一目的
实现? 同上
什么时候用过? 文件上传下载时选择不同的对象存储实现
3.4. 动态代理
不改变原有代码的基础上为类增加新功能
什么时候用过? 使用Spring AOP进行权限检验
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看