行为型模式
解决“类或对象如何组合成灵活结构”的问题,优化结构灵活性
适配器模式(Adapter):将一个类的接口转换成客户端期望的另一个接口,让接口不兼容的类能一起工作。
手机充电的Type-C转接头。手机只支持Type-C接口(目标接口),但旧充电器是USB-A接口(适配者接口),转接头(适配器)将USB-A信号转换为Type-C信号,让旧充电器能给新手机充电。
装饰器模式(Decorator):动态给对象添加额外职责,不改变原类结构,比继承更灵活。
咖啡店的咖啡加配料。“基础咖啡”是核心对象,“奶泡”“焦糖”“椰果”是装饰器;用户点“拿铁+奶泡+焦糖”时,先创建基础拿铁,再用奶泡装饰器添加奶泡,最后用焦糖装饰器添加焦糖,动态叠加功能。
代理模式(Proxy):为其他对象提供一种代理,控制对原对象的访问(如权限控制、延迟加载)。
视频网站的VIP视频代理。普通用户(客户端)无法直接访问VIP视频(真实对象),需通过“VIP权限代理”验证用户是否开通会员,验证通过才允许访问视频,控制对真实资源的访问。
外观模式(Facade):为复杂子系统提供一个统一的高层接口,简化客户端与子系统的交互。
智能家居的 “回家模式”控制。用户触发“回家模式”(外观接口),背后自动调用“开灯”“开空调”“拉窗帘”“开净化器”等子系统,用户无需逐个操作子设备,简化交互。
桥接模式(Bridge):将抽象部分与它的实现部分分离,使两者能独立变化(如抽象“形状”与实现“颜色”分离)。
画图软件的 “形状+颜色”组合。抽象部分是“形状”(圆形、方形),实现部分是“颜色”(红色、蓝色);将两者分离后,可灵活组合(红色圆形、蓝色方形),新增颜色/形状时无需修改原有代码。
组合模式(Composite):将对象组合成树形结构,以表示“部分-整体”关系,让客户端对单个对象和组合对象的处理一致。
文件管理器的 “文件夹-文件”结构。文件夹(组合对象)可包含子文件夹和文件(叶子对象),客户端操作“删除文件夹”时,会自动递归删除其下所有子文件夹和文件,对组合对象和叶子对象的处理逻辑一致。
享元模式(Flyweight):复用内存中已存在的相似对象,减少对象创建数量,降低内存消耗(如池化技术)。
游戏中的 “树木/草丛”渲染。游戏地图有大量相同的树木模型,无需创建上万棵独立树木对象,而是复用一个“树木享元对象”,仅动态修改位置、角度等差异化属性,减少内存占用。