设计模式的种类及其应用场景

2024-06-09 19:12

本文主要是介绍设计模式的种类及其应用场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

设计模式可以大致分为以下几类:创建型模式、结构型模式和行为型模式。每一类设计模式都有其独特的特点和应用场景。下面我将对这三类设计模式进行详细说明,并介绍它们各自的应用场景。

创建型模式

创建型模式 关注对象的创建过程,它抽象了实例化过程,帮助我们在创建对象时无需直接使用 new 关键字,降低了系统的耦合度。

  1. 单例模式(Singleton Pattern)
    • 描述:确保一个类只有一个实例,并提供一个全局访问点。
    • 应用场景:当频繁实例化并且创建的对象消耗很多资源时,如数据库连接池、日志记录器等。
  2. 工厂模式(Factory Pattern)
    • 描述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
    • 应用场景:当创建对象时不想直接使用 new 关键字,而是想将对象的创建与使用相分离时。
  3. 抽象工厂模式(Abstract Factory Pattern)
    • 描述:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
    • 应用场景:当需要创建的对象之间存在关联或依赖关系时,如UI工具包中的按钮、文本框等组件的创建。
  4. 建造者模式(Builder Pattern)
    • 描述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 应用场景:当需要创建一个复杂对象,该对象的构建过程允许有不同的表示时,如配置文件的生成、SQL语句的构造等。
  5. 原型模式(Prototype Pattern)
    • 描述:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    • 应用场景:当创建对象的成本较大(如初始化需要占用较多资源)时,或者当需要频繁创建具有相同或相似状态的对象时。

结构型模式

结构型模式 关注类和对象的组合,它采用继承以外的方法来组合对象,从而获得更大的灵活性。

  1. 适配器模式(Adapter Pattern)
    • 描述:将一个类的接口转换成客户端所期待的另一种接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。
    • 应用场景:当需要使用现有的类,但接口不符合要求时,或者当需要重用一些已存在的子类,但子类无法直接继承时。
  2. 桥接模式(Bridge Pattern)
    • 描述:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • 应用场景:当抽象和实现之间有明显的界限,且抽象和实现都需要独立变化时。
  3. 组合模式(Composite Pattern)
    • 描述:将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户对单个对象和复合对象的使用具有一致性。
    • 应用场景:当需要表示对象的部分-整体的层次结构时,或者当需要让客户端忽略复合对象和单个对象的区别时。
  4. 装饰器模式(Decorator Pattern)
    • 描述:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。
    • 应用场景:当需要动态地给一个对象添加功能,并且这些功能可以撤销时。
  5. 外观模式(Facade Pattern)
    • 描述:为子系统中的一组接口提供一个统一的接口,降低系统的复杂性。
    • 应用场景:当系统需要向客户端提供一个简单、一致的接口,以隐藏系统的复杂性时。

行为型模式

行为型模式 关注对象之间的通信和职责分配,它描述对象之间的交互模式以及分配职责。

  1. 观察者模式(Observer Pattern)
    • 描述:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,它的所有依赖者(观察者)都会收到通知并自动更新。
    • 应用场景:当对象之间需要保持一种一对多的依赖关系时,如GUI组件、订阅-发布系统等。
  2. 策略模式(Strategy Pattern)
    • 描述:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。
    • 应用场景:当需要在多种算法间进行选择和使用时,如排序算法、支付方式等。
  3. 模板方法模式(Template Method Pattern)
    • 描述:定义了一个操作中的算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可

后续会持续更新分享相关内容,记得关注哦!

这篇关于设计模式的种类及其应用场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046050

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛