浅谈结构型模式 - 适配器模式,桥接模式,组合模式,装饰模式,外观模式,享元模式
1. 适配器模式 - ADAPTER
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。
通俗解释1:去美国或者欧洲旅游会发现他们的电源插座和国内插头是不同的,这个时候带上充电头适配器这样去哪里都没问题了。充电头作为一个通用对象,在欧洲插座,有继承于充电头的欧洲插头,有继承于充电头适配器。适配器会将电流适配成国内充电头可以支持的电流,这样国内充电头也可以在欧洲插座上用了
2. 桥接模式 - BRIDGE
将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用
主要目的是将紧耦合变成松耦合:合成聚合复用原则 - 尽量不要使用类继承
紧耦合:每次增加一个手机品牌都要加两个类, thats bad
手机软件 -- 通讯录
| -- 三星通讯录
| -- 苹果通讯录
-- 游戏
-- 三星游戏
-- 苹果游戏
松耦合:如果有新的品牌,我们只需要扩展类,不需要修改类
手机品牌 <--- 包含 手机软件
-- 三星 -- 通讯录
-- 苹果 -- 游戏
3. 组合模式 - COMPOSITE
将对象组合成树状结构, 使得用户对单个对象和组合对象的使用具有一致性
通俗解释1:女朋友今天过生日,跟我说要送她一件礼物。我说没问题你自己挑。
- ”这件T恤挺漂亮,买,这条裙子好看,买,这个包是最新款,买。”
- “买了三件了呀,我只答应送一件礼物的哦”
- ”T恤加裙子加包包,正好配成一套呀,导购员,麻烦你包起来~“
“emmmmmmmmmmmmmm……”
女友也会用组织模式了
通俗解释2:当你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就可以考虑用组合模式了。用公司管理系统为例,他们有共同的方法:增加 删除 职责。
北京总公司
-- 人力资源部
-- 财务部
-- 天津分公司
-- 人力资源部
-- 财务部
-- 上海分公司
-- 人力资源部
4. 装饰模式 - DECORATOR
通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为(嵌套结构),动态的给一个对象添加额外的职责
通俗解释1:来玩阿汤哥扮装游戏~
人 阿汤哥
-- 服饰 + Decorate(Person p)
-- T恤 T恤.Decorate(阿汤哥)
-- 阔腿裤 阔腿裤.Decorate(T恤)
-- 运动鞋 运动鞋.Decorate(阔腿裤)
最后得到 穿T恤 阔腿裤 运动鞋的阿汤哥
5. 外观模式 - FACADE
能为子系统的一组接口提供一个一致的界面,使得该子系统更加容易使用
给程序库、 框架或其他复杂类提供一个简单的接口
通俗解释1:以基金公司为例:不想再做韭菜了,就把钱给基金公司帮我们打理钱。我们不用知道需要买什么股票,不用天天盯着股票,只用把钱交给基金公司,剩下的都是基金公司的事了,为韭菜们省了不少力。
韭菜们 -- 基金公司 (Facade)
-- 股票A
-- 股票B
-- 国债A
-- 房地产A
6. 享元模式 - FLYWEIGHT
通过共享多个对象所共有的相同状态, 使得在有限的内存容量中载入更多对象
通俗解释1:枪战游戏中大量的子弹、 导弹和爆炸弹片这些粒子效果如果都由独立对象表示,内存很容易就会用光。粒子系统有很多相同的地方,比如颜色,sprite,而粒子的状态是不同的位置,速度等。我们可以把不变的常量存在内部状态中,而那些外在状态的数据保存在容量对象中。
通俗解释2:海王必备技能,每天给辣么多池塘里的鱼发短信太累了,海王想到一个好办法,把一些常用的句子存在手机里要用的时候直接拿出来,在前面加上池塘里的鱼的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是Flyweight,池塘里的鱼的名字就是提取出来的外部特征,根据上下文情况使用。
7. 代理模式 - PROXY
提供一个代理来控制于原对象的访问
通俗解释1:小明追求小花,他不敢直接对小花说,于是他找他的好朋友小王,让小王帮他给小花送娃娃送花。小王在这里面就是充当着代理,小王和小明都继承了送礼物的接口。
实际运用:远程代理(WebService, WebReference),虚拟代理(创建开销较大的对象,可以用虚拟代理代替对象),安全代理(控制对象权限)等。
Reference
- https://refactoringguru.cn/design-patterns
- 大话设计模式
- http://blog.sina.com.cn/s/blog_6e162de70101d0cf.html
__EOF__

本文链接:https://www.cnblogs.com/cancantrbl/p/14757881.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现