结构型设计模式(Structural Design Patterns)主要关注类和对象的组合,以形成更大的结构。它们通过识别实体之间的关系,帮助设计师确保系统的各个部分能够协同工作。以下是几种常见的结构型设计模式及其详细介绍和对比:
一, 代理模式(Proxy Pattern)
用途: 为另一个对象提供一个替身或占位符,以控制对这个对象的访问。
实现方式: 创建代理类,代理类和实际类实现相同的接口。
优点:
- 控制了对对象的访问,可以增加额外的功能,如延迟加载、访问控制等。
缺点:
- 增加了系统的复杂性,可能导致性能下降。
二,装饰器模式(Decorator Pattern)
用途: 动态地给一个对象添加一些额外的职责。
实现方式: 创建一个装饰类包装原始类,装饰类和原始类具有相同的接口。
优点:
- 比生成子类更加灵活,可以动态扩展对象的功能。
缺点:
- 可能导致大量的小类,增加系统复杂性。
三,适配器模式(Adapter Pattern)
用途: 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作。
实现方式:
- 类适配器: 通过多重继承实现。
- 对象适配器: 通过组合实现。
优点:
- 提高了类的复用性和灵活性。
缺点:
- 类适配器需要多重继承,可能导致复杂性增加。
四,组合模式(Composite Pattern)
用途: 将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。
实现方式: 通过定义一个组件接口,叶子节点和组合节点实现该接口。
优点:
- 简化了客户端代码,使得处理单个对象和组合对象的方式一致。
缺点:
- 使得系统设计更加复杂,可能导致过度设计。
五,门面模式(Facade Pattern)
用途: 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得子系统更容易使用。
实现方式: 创建一个外观类,封装子系统的复杂性。
优点:
- 减少了复杂系统的依赖关系,简化了接口。
缺点:
- 不符合开闭原则,修改外观类可能影响子系统。
六,享元模式(Flyweight Pattern)
用途: 通过共享技术来有效地支持大量细粒度对象的复用,减少内存占用。
实现方式: 将对象的可共享部分和不可共享部分分离,使用工厂类管理共享对象。
优点:
- 减少了对象数量,节省了内存。
缺点:
- 需要分离可共享和不可共享部分,增加了系统复杂性。
七,桥接模式(Bridge Pattern)
用途: 将抽象部分与实现部分分离,使它们可以独立变化。
实现方式: 通过组合,将抽象类与实现类接口分离。
优点:
- 解决了类爆炸问题,适用于多个维度变化的系统。
缺点:
- 增加了系统的复杂性,需要额外的理解和设计。
八,对比
- 适配器模式 vs 桥接模式: 适配器模式主要解决接口不兼容的问题,而桥梁模式则是为了分离抽象和实现,解决类爆炸问题。
- 组合模式 vs 装饰器模式: 组合模式用于表示“部分-整体”的层次结构,而装饰模式用于动态地添加职责。组合模式强调结构,装饰模式强调功能扩展。
- 门面模式 vs 代理模式: 外观模式简化子系统接口,减少依赖关系;代理模式控制对象访问,增加功能。外观模式关注接口简化,代理模式关注控制访问。
- 享元模式 vs 其他模式: 享元模式通过共享技术减少内存占用,适用于大量相似对象的场景。其他模式更多关注对象的组合和职责扩展。
九,总结
结构型设计模式通过优化类和对象的组合,提高了系统的灵活性和可维护性。这些模式帮助开发者构建更清晰、更易于理解和扩展的系统结构。理解和应用这些模式可以显著提升软件设计的质量,使系统更具弹性和可扩展性。
如果你对设计模式、软件架构、编程技巧等内容感兴趣,欢迎关注我们的同名微信公众号【技术拾光者】。在这里,我们将定期分享最新的技术文章和实用的编程技巧,帮助你不断提升自己的技术水平。
扫描下方二维码,立即关注我们吧!
感谢你的阅读和支持,我们期待与你在微信公众号上交流更多有趣的技术话题!
标签:组合,对象,Pattern,适配器,接口,详解,模式,设计模式,结构型 From: https://blog.csdn.net/weixin_43319056/article/details/142574259