导图社区 设计模式GoF23实战攻略2023版
在进行系统设计时不知道怎么搞?解决具体问题时不知道用哪个设计模式?现在有这份设计模式实战攻略的思维导图,让我们从问题的角度去研究具体做法,得到启发,保证让你以后再解决问题时得心应手!这是最新的2023版,补充完善了内容,修正了之前版本中的若干错误。保证让你感受到物超所值。
编辑于2021-12-10 09:54:58这是一篇关于以ChatGPT说AI-2025版的思维导图,主要内容包括:OpenAI/ChatGPT,苹果系,HuggingFace,Stable-Diffusion,Midjourney,主流大模型的技术架构,Meta/Facebook系,Google系,人工智能的巨大优势,AI的基础发展,以及最近非常火爆的DeepSeek。更新了MCP相关内容,优化展示效果,增加注释等知识库内容。
在日常工作如果涉及到各种坐标系,我们只需要看这张思维导图,就会一目了然了。各种常见的坐标和相关应用信息都有。
在进行系统设计时不知道怎么搞?解决具体问题时不知道用哪个设计模式?现在有这份设计模式实战攻略的思维导图,让我们从问题的角度去研究具体做法,得到启发,保证让你以后再解决问题时得心应手!这是最新的2023版,补充完善了内容,修正了之前版本中的若干错误。保证让你感受到物超所值。
社区模板帮助中心,点此进入>>
这是一篇关于以ChatGPT说AI-2025版的思维导图,主要内容包括:OpenAI/ChatGPT,苹果系,HuggingFace,Stable-Diffusion,Midjourney,主流大模型的技术架构,Meta/Facebook系,Google系,人工智能的巨大优势,AI的基础发展,以及最近非常火爆的DeepSeek。更新了MCP相关内容,优化展示效果,增加注释等知识库内容。
在日常工作如果涉及到各种坐标系,我们只需要看这张思维导图,就会一目了然了。各种常见的坐标和相关应用信息都有。
在进行系统设计时不知道怎么搞?解决具体问题时不知道用哪个设计模式?现在有这份设计模式实战攻略的思维导图,让我们从问题的角度去研究具体做法,得到启发,保证让你以后再解决问题时得心应手!这是最新的2023版,补充完善了内容,修正了之前版本中的若干错误。保证让你感受到物超所值。
设计模式gof23 实战攻略2023版
设计模式给我们了一些固定的编程“套路”,问题是:我们在遇到问题的时候用哪种“套路”来“应敌”呢?相信这篇知识图谱能够给大家一些思维上的启发。
系统设计原则
注:事实上同时满足所有原则是非常困难的,甚至是不可能的。
开闭原则
对扩展开放,对修改关闭
里氏替换原则
子类可以扩展父类的功能,但是不能改变父类的功能
子类除新增方法外,尽量不要推翻父类已经存在的方法
依赖倒置原则
细节可以依赖抽象,但抽象不应该依赖细节
基于抽象设计的系统,相对稳定
面向接口编程,不面向实现编程
Spring框架中大量使用
单一职责原则
一个方法尽量只做一件事情
我曾经过见有人写了一个方法,同时实现了增删改查,看似写的很高明,但是维护很困难,请不要这么做。
接口隔离原则
不要设计臃肿庞大的接口,设计有具体职责的小型接口
迪米特法则
最少知识原则
调用者不需要知道具体的实现细节
合成复用原则
尽量使用组合、聚合,其次才考虑使用继承
如果要使用继承,要遵循里氏替换原则
创建型模式
了解Java中的类加载机制,对于创建对象的过程和优化具有重要帮助作用。
1. 工厂模式
简化对象的创建
2. 工厂方法模式
通过对应方法完成目标的创建
3. 单例模式
只允许一个实例
降低资源占用
保证数据一致性
要注意分布式/集群模式下的不同
4. 建造型模式
多步骤多环节创建复杂对象
5. 原型模式
用于创建大量相似对象
结构型模式
更多的时候用于对数据、模块、代码的组织
1. 适配器模式
让两个不相同的东西一起工作
USB转换器
键盘是PS/2接口(圆口)的
计算机只有USB接口
转换器
输入
收到键盘的PS/2信号,转为USB的,再传给计算机
反馈
收到计算机的USB信号,转为PS/2的,再传给键盘
新旧接口
旧接口接收整数
新接口接收字符串
将新接口收到的字符串转换为整数,然后再给旧接口使用
2. 桥接模式
一个事物要按多个维度划分
人
按性别划分
按职业划分
汽车
按品牌划分
按动力类型划分
数据
按时间划分
时域
按变化频率划分
频域
思路
使用继承会导致类急剧膨胀
使用组合代替继承实现
案例
定义颜色类
红
黄
蓝
定义材质类
牛皮
PU皮
定义包包类型
手包
挎包
钱包
组合关系
各种包包和颜色组合
各种包包和材质组合
3. 组合模式
事物的主要和次要、整体和部分的关系
学校
教学楼
实验楼
大门
院墙
办公楼
操场
灵活组合
可以组合出幼儿园
可以组合出中学
可以组合出大学
GUI
窗口
控件
容器
事件响应机制
渲染机制
灵活组合
可以组合出常规窗口
可以组合出固定窗口
可以组合出对话框
组合出模态窗口
组合出非模态窗口
可以组合出异形窗口
可以组合出动画窗口
4. 装饰器模式
复用现有东西,动态扩展其功能
煎饼
加鸡蛋、加香肠,但它仍然是煎饼
文本读写功能模块
加缓存、加进度,但它仍然是文本文件读写功能模块
接口
加身份验证、加安全拦截,但它仍然是接口
5. 外观模式
做一件事有多个步骤,想要一把梭,让办事者简单
买房
看房
签合同
交钱
交税
办证
装修
入住
一把梭
给中介提供各类证件、钱、授权文件等“入参”之后,坐等通知,拎包入住
手机淘宝APP我的页面
手机淘宝App的“我的”页面上有很多数据,如果调很多接口,会导致页面加载缓慢甚至加载不出来,还会衍生出其他如网络流量上涨、耗电增加、手机卡顿等严重问题,一个请求一次完成,是最“集约化”的、“性价比”最高的做法。
用户基本信息
头像、昵称等个人基础信息
高频功能区
收藏、关注、浏览情况、消费情况、余额等
社区交流信息
微淘、视频等社区相关内容
等级级别信息
积分、星级、特权等内容
订单信息
待付款、待发货、待收货、待评价、退款/售后等订单概要信息
权益信息
红包数量、优惠券数量、各种卡、淘金币等情况
扩展小程序功能
农场、淘人生、快递、签到领钱、试用品等信息
推荐信息
个性化推荐,拓展成交几率
人际关系信息
淘友圈、好友、动态等信息流
6. 享元模式
不同的事物有很多共性的东西,抽取出来共享
象棋中的棋子
都有位置、颜色信息
网络设备
出口、入口等
文件系统中的文件或目录
位置、大小、创建时间、权限等
7. 代理模式
请求者不直接访问目标,通过代理访问
便于隐藏细节、安全控制、两者解耦
买票人、代售点、火车站
代售点可以做很多工作、验证、验钞、记账等
避免买票人直接和车站打交道
粉丝、经纪人、明星
经纪人可以做很多工作,初审、谈价、安排行程等
避免粉丝直接和明星打交道
接口调用者、拦截器、接口实现
拦截器可以做很多工作,权限验证、身份验证等
避免调用者直接和具体功能接口打交道
好处很明显
可以降低目标对象的负荷,避免功能过重过杂
可以将具体的业务性的工作和非业务性的工作分离
比如中间代理层专司安全控制而不负责具体业务工作
灵活地定制对目标的访问相关的限制
安全限制、流量限制等等
可以快速部署多个代理
如果中间代理负载过重,快速安排多个代理
车站、明星、业务实现功能模块仍然只有1个,因为这些功能组件如果复制多个,要考虑更多的问题,成本和代价比较大,比如售票的车站如果只有1个,实现相对容易,如果有多个,就要考虑售票竞争问题,否则就极有可能会因为多卖而导致一座多票甚至超员。
行为型模式
更多的时候用于研究一件事情具体做法,以怎样的方式是最优雅、灵活、高效的。
1. 责任链模式
一件事情要被多个人处理,形成流程
请假
发起
组长
经理
总监
VP
老板
采购
发起
逐级审批
借款
下单
收货
验货
付款
收票
记账
API拦截
攻击黑名单验证
身份验证
权限验证
签名验证
参数验证
入参日志
2. 命令模式
方法的请求者和方法的实现者解耦,让请求者不必关心具体怎么做
似乎和代理模式、门面模式有点像
顾客-菜单-厨师
人-遥控器-电视
3. 解释器模式
某问题的处理有相似性和规律性
解析数学公式
解析SQL语句
解析自定义语法
也就是特定领域模型DSL
思路
1、将问题相关要素进行抽象,形成文法要素
2、提取文法要素的解释逻辑
3、解释执行用户定义的语法文本,形成结果
案例
由数字和操作符组成的数学公式
由地域和人的类型组成的优惠条款
4. 迭代器模式
逐项访问某个对象的构成元素
JDK已经提供了很好的迭代器
5. 中介者模式
事物与事物之间的关系是网状的
通过中介者,改造成为星状关系
通信录
通信录成员之间是网状关系
所有成员面向通信录
某人电话变更,其他人不必记住,需要的时候直接拨号
视图和数据之间是网状关系
视图和数据都可以访问中介者
数据不必关心谁在使用自己
视图不必关心自己都要维护哪些数据,需要数据的时候直接用即可
6. 备忘录模式
后悔刚才所做的事情
办公软件的CTRL+Z回退功能
浏览器的后退功能
象棋的悔棋功能
7. 观察者模式
一件事情的变化会引发一系列的连锁反应
数据发生变化,所有引用它的视图都要更新
红绿灯发生变化,所有在途车辆都要收到通知
红灯停
绿灯行
看到黄灯等一等
某支股票价格变动,所有购买了该股票的股民的账本都要刷新
8. 策略模式
做一件事情有多种方式方法
出行可以步行、骑车、驾车、出租车、火车、飞机等等交通工具
售货可以现金、刷卡、兑换、扫码等等方式
排序可以冒泡、快速、选择、插入等等算法
9. 模板方法模式
做一件事情的若干个步骤中,有一些是相对固定的,一些是很具体的
对一个人来说
每日安排,起床、吃饭、睡觉是固定的,但上班所做的事是具体的
上班期间不同的事情有不同的做法
对医生来说
验挂号单、准备药材、发出药材等事务是固定的,诊疗是具体的
不同的疾病有不同的诊疗法
对求职者来说
找工作,写简历、发简历、打电话是固定的,面试是具体的
不同的工种/岗位有不同的面试法
10. 访问者模式
一个事物,不同的人来访问,结果不同
公园
游客关注在园人数
建筑师关注建设情况
环卫人员关注卫生情况
电影
影迷关注电影评价
演员关注导演参演信息
经纪人员关注票房信息
购物车
顾客关注是否正在打折优惠
收银员关注是否现在结算
理货员关注库存情况
11. 状态模式
状态不同,行为不同
人的情绪
高兴
大笑
悲伤
哭泣
愤怒
冲动行事
学生成绩
优秀
表彰
及格
鼓励
不及格
补课