快速入门C#设计模式【2】结构型模式
内容提要
结构型设计模式包括适配器、桥接、组合、装饰、外观、享元和代理模式。适配器模式解决不兼容接口问题;桥接模式分离抽象与实现;组合模式构建树形结构;装饰模式添加新功能;外观模式提供简化接口;享元模式减少内存使用;代理模式控制对象访问。
延伸解读
结构型模式的核心关注点
结构型模式关注类和对象的组合方式,以构建更灵活、可维护的结构。适配器解决接口不兼容,桥接分离抽象与实现,组合构建树形层次,装饰动态添加职责,外观简化复杂子系统,享元共享对象节省内存,代理控制对象访问。这些模式各有侧重,但都旨在降低系统耦合,提高扩展性。
适配器与桥接的差异
适配器模式用于让已有接口协同工作,通常是在系统集成或维护时,将不兼容的接口通过适配器转换,而不修改原有代码。桥接模式则是在设计初期将抽象部分与实现部分分离,使两者可以独立变化,减少依赖。适配器是事后补救,桥接是事前规划,两者目标不同。
装饰与代理的对比
装饰模式通过包装对象来动态添加新功能,强调扩展性,且遵循开闭原则。代理模式也包装对象,但目的是控制访问,可以在访问前后添加额外操作,如延迟加载、权限检查或日志记录。装饰关注功能增强,代理关注访问控制,虽然结构相似,但意图不同。
享元模式的内存优化思路
享元模式通过共享对象来减少内存占用,适用于大量相似对象的场景。它将对象状态分为内部状态和外部状态:内部状态存储在享元对象中,可共享;外部状态由客户端维护,随环境变化。这样,只需少量享元对象即可表示大量对象,但需注意外部状态的管理可能增加复杂度。
Q&A
什么是适配器模式,它的主要作用是什么?
适配器模式是一种结构型设计模式,允许不兼容的接口之间可以一起工作,主要用于系统后期维护和扩展,帮助已存在的系统与第三方库或遗留系统交互。
桥接模式如何减少抽象与实现之间的依赖?
桥接模式通过提供一个桥接结构,将抽象部分的代码与接口实现部分的代码分离,使得两者可以独立变化,从而减少彼此间的依赖关系。
组合模式的主要组成部分有哪些?
组合模式主要包括组件(Component)、叶节点(Leaf)和复合组件(Composite),用于表示部分-整体的层次结构。
装饰模式是如何在不修改现有对象的情况下添加新功能的?
装饰模式通过创建一个包含目标对象的包装对象来实现新功能的添加,这样既扩展了对象的功能,也遵守了开闭原则。
外观模式的主要目的是什么?
外观模式的主要目的是隐藏系统的复杂性,提供一个简化的接口给客户端,从而减少系统间的依赖,提高子系统的独立性。
享元模式如何优化内存使用?
享元模式通过共享尽可能多的相似对象来减少内存使用,特别适用于处理大量对象时,其中许多对象由重复的状态组成。