当前位置: 首页 > news >正文

结构性设计模式(Structural Design Patterns)是面向对象设计模式中的一类

结构性设计模式(Structural Design Patterns)是面向对象设计模式中的一类,主要用于处理类或对象的组合关系,以简化系统结构、提高代码复用性与灵活性。它们关注如何将类和对象组合成更大的结构,同时保持系统的松耦合与可扩展性。常见的结构性设计模式包括:

  • 适配器模式(Adapter):使不兼容的接口能够协同工作,常用于系统集成或遗留系统改造。
  • 装饰器模式(Decorator):动态地为对象添加职责,避免子类爆炸,符合开闭原则。
  • 代理模式(Proxy):为其他对象提供一个代理以控制对原对象的访问(如远程代理、虚拟代理、保护代理)。
  • 外观模式(Facade):为复杂子系统提供统一、简化的接口,降低客户端与子系统之间的耦合。
  • 桥接模式(Bridge):将抽象与实现分离,使二者可以独立变化,适用于多维度变化的系统。
  • 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”层次关系,让客户端统一处理单个对象和组合对象。
  • 享元模式(Flyweight):通过共享技术有效支持大量细粒度对象,节省内存(适用于对象数量庞大且状态可外部化场景)。

这些模式均基于面向对象的核心原则(封装、继承、多态、抽象),强调通过接口、组合、委托等机制构建灵活、可维护的结构。

# 示例:装饰器模式(Python 实现)fromabcimportABC,abstractmethodclassComponent(ABC):@abstractmethoddefoperation(self)->str:passclassConcreteComponent(Component):defoperation(self)->str:return"ConcreteComponent"classDecorator(Component):def__init__(self,component:Component)->None:self._component=componentdefoperation(self)->str:returnf"Decorator({self._component.operation()})"# 使用示例simple=ConcreteComponent()decorated=Decorator(simple)print(decorated.operation())# 输出:Decorator(ConcreteComponent)

适配器模式(Adapter)与代理模式(Proxy)虽然在结构上相似(都通过包装目标对象、实现相同接口、委托调用),但本质区别在于设计意图(purpose)和职责定位

维度适配器模式(Adapter)代理模式(Proxy)
核心目的解决接口不兼容问题,让原本因接口不匹配而无法协作的类/组件能够一起工作(“转换接口”)。控制对目标对象的访问,在不改变客户端代码的前提下,为对象提供额外的间接层(“增强访问控制”)。
动机来源面向复用已有代码(如遗留系统、第三方库),需适配其接口到当前系统契约。面向增强行为或管理资源(如延迟加载、权限校验、日志记录、远程通信封装)。
是否修改语义通常不改变目标对象的行为语义,仅做接口转换(如将request()转为send())。可能扩展、拦截或替换原始行为(如代理可拒绝调用、缓存结果、异步转发)。
生命周期关系适配器通常不控制目标对象的创建与销毁,目标对象常由客户端或外部提供。代理常负责目标对象的创建、初始化甚至生命周期管理(如虚拟代理按需实例化)。
典型场景将旧版XMLParser接口适配为新IDataSource接口;Java 中Collections.list()将 Enumeration 转为 List。图像加载代理(延迟加载大图)、RMI 远程代理、Spring AOP 中的 JDK 动态代理。

✅ 简记口诀:
适配器是“翻译官”(语言不通,帮你转译);代理是“门卫+管家”(你不能直接见老板,我替你预约、审核、代收快递)。

# 适配器示例:将旧接口 DataReader.adapt() → 新接口 DataSource.read()classOldDataReader:defadapt(self)->str:return"raw data"classDataSource(ABC):@abstractmethoddefread(self)->str:passclassDataReaderAdapter(DataSource):def__init__(self,reader:OldDataReader):self._reader=readerdefread(self)->str:# 接口转换:adapt → readreturnf"Adapted:{self._reader.adapt()}"# 代理示例:控制访问 + 延迟初始化classExpensiveImage:def__init__(self,path:str):print("Loading heavy image...")self._path=pathdefdisplay(self)->str:returnf"Displaying{self._path}"classImageProxy(DataSource):def__init__(self,path:str):self._path=path self._real_image=None# 延迟加载defread(self)->str:ifself._real_imageisNone:self._real_image=ExpensiveImage(self._path)returnself._real_image.display()

http://www.jsqmd.com/news/1237922/

相关文章:

  • 2026无锡可定制化企业网站建设公司**汇总 - 奔跑123
  • 从慢如蜗牛到毫秒响应:一次深度SQL调优的实战复盘
  • 用户行为路径分析:桑基图背后的 SQL 数据准备与清洗
  • 2026年顺德产业带企业实力评估:重庆洲胜物流有限公司的行业价值与决策框架 - 甄选服务推荐
  • 7B 模型量化降本全复盘:FP32 到 INT4 的精度-成本博弈
  • 武汉欧米茄回收价格查询与靠谱回收平台实测**2026年7月最新) - 诚收名表回收平台
  • 2026年三河商业空间装修公司本地靠谱选择实用指南 - 热点品牌推荐
  • Linux 内核调优复盘:单机百万连接场景下的协议栈瓶颈击穿记录
  • 2026实地走访整理 国内塑料造粒机厂家**汇总 - 奔跑123
  • 福建周边找聚氨酯地坪漆源头厂家电话实用参考指南 - 热点品牌推荐
  • 2026优选绵阳比较好的肥肠餐馆:地道风味与匠心传承的老店选择 - 品牌鉴赏官2026
  • 实时大屏项目复盘:从需求沟通到性能优化的全流程记录
  • 2026年 高明本地生活服务品牌**:全能型优选与口碑价值深度解析 - 甄选服务推荐
  • 西安清洗剂优质厂商 本地采购选型实用攻略 - 热点品牌推荐
  • 鸿蒙 ArkTS 实战:Secondhand Book Exchange 从二手书交换站到社区换书应用完整解析
  • 2026年养殖粉碎机源头厂家优质选购实用参考指南 - 热点品牌推荐
  • 2026年7月最新长沙本地大芯板靠谱供应商**清单公示 - 奔跑123
  • 厦门万国回收价格查询和靠谱回收平台实测**2026年7月最新) - 嘉价奢侈品回收平台
  • AI 供应链需求预测:销售数据到补货建议的完整分析链路
  • 鄂西北区域专业的宝骏车发动机批发厂家联系方式查询指引 - 热点品牌推荐
  • 2026淮南房屋渗漏水检测公司口碑榜**推荐-正规防水补漏一站式维修:卫生间/厨房/阳台/屋顶/地下室/屋顶/天沟渗漏水精准测漏补漏上门 - 安佳防水
  • mba毕业论文模板
  • 2026年华北养殖粉碎机高口碑生产厂家选购参考指南 - 热点品牌推荐
  • 贵州农村自建房铝艺大门厂家选品要点及靠谱渠道分享 - 热点品牌推荐
  • 2026年上海奉贤挑选靠谱钢琴搬家品牌实用参考全攻略 - 热点品牌推荐
  • 江苏沿海船舶配件渔网刀制造商选型及场景应用全指南 - 热点品牌推荐
  • 2026年工程采购不锈钢井盖源头厂家推荐哪家更靠谱 - 热点品牌推荐
  • 2026年全自动套膜收缩包装机热门厂家哪里有卖的 - 热点品牌推荐
  • 长沙万国回收价格查询与各大回收平台实测**2026年7月最新) - 诚收名表回收平台
  • 2026年东莞可靠的制药无尘车间防爆灯厂家电话实用指南 - 热点品牌推荐