设计模式:结构设计模式
介绍
本文讨论了使用组合将类和对象合并到更大结构中的各种结构模式,这有助于我们解决开发人员最有可能遇到的许多现实问题。
什么是结构设计模式?
结构设计模式是如何将不同的对象和类组合在一起形成更大的结构以共同实现多个目标的蓝图。结构设计中的模式展示了如何以可扩展和灵活的方式将系统的独特部分组合在一起。因此,借助结构设计模式,我们可以针对并更改结构的特定部分,而无需更改整个结构。
结构设计模式的类型
说到设计模式的类型,我们有几种设计模式,开发人员更常使用的设计模式是:
- 适配器模式
- 桥梁图案
- 复合图案
- 装饰模式
- 立面图案
- 享元模式
- 代理模式
从...开始,
适配器模式
适配器模式有助于根据客户的需求将一个类的接口转换为另一个接口。因此,基本上通过使用具有不同接口的类的服务来提供客户端所需的内容。?适配器模式也被称为包装器。
现在,让我们讨论?何时使用适配器模式:
- 当您想要创建一个可重用的类,可以轻松地与其他没有任何兼容接口的类协作时。
- 当您想要在特定环境中使用一个对象时,该环境需要与其对象接口不同的接口。
- 当你想使用一个现有的类,但它的接口与该类所需的接口不匹配时。
因此,基本上,适配器模式充当两个类之间的中间状态。
现在,接下来,我们有
桥梁图案
桥接模式的主要功能是将实现部分与抽象部分分开,使得类的抽象和实现可以独立变化。
桥接模式分为两部分:
- 实施或主体
- 抽象或处理
现在我们来讨论一下
何时使用桥接模式
- 当使用另一个子类扩展实现及其功能抽象需求时。
- 当您不想因实施更改而影响客户时。
- 当您想要避免实现与其功能抽象之间的永久绑定时。
接下来,我们有
复合图案
在复合模式中,客户端能够操作可能代表也可能不代表其层次结构的对象。简而言之,复合模式允许您创建具有独特复杂性的层次树,从而可以单独处理每个对象。
现在我们来讨论一下
何时使用复合模式
- 当您想要向特定对象添加新类型的组件时
- 它提供了可管理的界面和结构的灵活性。
- 它有助于定义包含复杂和原始对象的层次结构。
接下来,我们有
装饰模式
在装饰模式中,我们可以添加或删除对象的功能,而不改变对象的功能或外观。因此,在装饰器模式的帮助下,我们可以向对象添加额外的职责,而无需更改对象的功能。
现在我们来讨论一下
何时使用装饰模式
- 它增强了对象的可扩展性,因为更改是通过编写新类来进行的。
- 与静态继承相比,提供了更大的灵活性。
- 不是将所有行为编码到单个对象中,而是通过编码一系列类来简化功能的每个特定部分。
接下来,我们有
立面图案
在外观模式中,我们为子系统的一组接口提供了一个简化的接口,以向客户端隐藏子系统的复杂性。简而言之,在外观模式的帮助下,我们通过描述更高级别的接口使子系统更易于使用。
现在我们来讨论一下
何时使用外观模式
- 当抽象的实现类和客户端需求之间存在很多依赖关系时。
- 当您想要在子系统中拥有层时。
- 当您想要提供一个简单的接口而不是复杂的子系统时。
接下来,我们有
享元模式
享元模式通过在找不到相似对象时存储和创建新对象来帮助我们重用相似类型的现有对象。因此,简单来说,它可以帮助我们减少包含相同数据的多个实例的费用。
现在我们来讨论一下
何时使用享元模式
- 通过重复使用相似的对象来降低存储成本。
- 当需要大量相似的对象时。
- 当应用程序依赖于唯一的对象标识时。
接下来,我们有
代理模式
在代理模式中,我们提供占位符或代理对象来控制对原始对象的访问。简单来说,在访问原始数据之前,在客户端之前提供代理或虚拟信息层。代理一共有四种类型
- 远程代理
- 虚拟代理(最常见)
- 保护代理
- 智能代理
现在我们来讨论一下
何时使用哪种代理模式
- 远程代理可用于使接口资源像 Web 服务一样远程可用。
- 当需要进行多个数据库调用来提取大文件时,可以使用虚拟代理,因为这是一个昂贵的过程,我们可以使用虚拟代理来降低成本。
- 当需要数据安全或隐私时,可以使用保护代理。借助代理模式,我们可以验证用户是否有权访问数据。
- 当我们需要为特定对象提供额外的安全层时,可以使用智能代理。
所以,到目前为止我们只讨论了何时使用结构模式来解决问题,但现在您可能会想现实世界中需要什么结构模式。
结构设计模式解决了哪些问题?
- 应用程序的结构变得更加简单和干净。
- 应用程序的效率提高。
- 代码的可重用性增加。
结论
我希望您对结构设计模式是什么以及它的类型有一个高层次的了解。
让我们回顾一下到目前为止我们所学到的知识,
- 什么是结构模式?
- 每种模式与其他模式有何不同以及何时适合使用特定模式。
- 最后,我们讨论了结构设计模式解决的问题以及为什么它在构建应用中是有效的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!