深入理解设计模式:六大经典模式解析

深入理解设计模式:六大经典模式解析

    • 1. 单例模式(Singleton Pattern)
      • 1.1 概述
      • 1.2 示例场景
      • 1.3 实现要点
    • 2. 工厂模式(Factory Pattern)
      • 2.1 简单工厂
      • 2.2 抽象工厂
      • 2.3 示例场景
      • 2.4 实现要点
    • 3. 观察者模式(Observer Pattern)
      • 3.1 概述
      • 3.2 示例场景
      • 3.3 实现要点
    • 4. 外观模式(Facade Pattern)
      • 4.1 概述
      • 4.2 示例场景
      • 4.3 实现要点
    • 5. 模版方法模式(Template Method Pattern)
      • 5.1 概述
      • 5.2 示例场景
      • 5.3 实现要点
    • 6. 状态模式(State Pattern)
      • 6.1 概述
      • 6.2 示例场景
      • 6.3 实现要点


💖The Begin💖点点关注,收藏不迷路💖

设计模式是解决常见问题的最佳实践总结。今天,我们将一起探讨六种经典的设计模式。

1. 单例模式(Singleton Pattern)

1.1 概述

单例模式确保一个类仅有一个实例,并提供一个全局访问点。

1.2 示例场景

  • 应用程序中的日志记录器
  • 系统中唯一的配置文件管理器

1.3 实现要点

  • 私有化构造函数
  • 提供一个公共的静态方法来访问类的唯一实例

2. 工厂模式(Factory Pattern)

2.1 简单工厂

通过定义一个工厂类来创建对象的实例。

2.2 抽象工厂

提供了一个创建一系列相关或相互依赖对象的接口。

2.3 示例场景

  • 多种数据库连接对象的创建
  • 不同操作系统的UI组件创建

2.4 实现要点

  • 定义一个接口用于创建对象
  • 创建一个工厂类,根据输入返回不同类的实例

3. 观察者模式(Observer Pattern)

3.1 概述

定义了一种一对多的依赖关系,当主题对象状态变化时,通知所有观察者对象。

3.2 示例场景

  • 实时消息通知系统
  • 股票行情更新

3.3 实现要点

  • 主题(Subject)维护一个观察者列表
  • 观察者(Observer)实现一个更新接口
  • 当主题状态变化时,遍历观察者列表并调用更新方法

4. 外观模式(Facade Pattern)

4.1 概述

为子系统中的一组接口提供一个统一的接口。

4.2 示例场景

  • 复杂的库或框架的简化接口
  • 应用程序中多模块间的交互封装

4.3 实现要点

  • 创建一个外观类,封装子系统的复杂操作
  • 客户端通过外观类与子系统交互

5. 模版方法模式(Template Method Pattern)

5.1 概述

定义了一个操作中的算法的骨架,延迟某些步骤到子类中实现。

5.2 示例场景

  • 复杂的文档处理流程
  • 游戏中的回合制战斗逻辑

5.3 实现要点

  • 定义一个抽象类,包含模版方法
  • 模版方法包含调用一系列抽象方法的钩子
  • 子类通过实现这些抽象方法来定义算法的特定步骤

6. 状态模式(State Pattern)

6.1 概述

允许对象在内部状态改变时改变它的行为。

6.2 示例场景

  • 订单处理流程
  • 游戏角色的状态管理

6.3 实现要点

  • 定义一个状态接口,包含各种行为方法
  • 创建具体的状态类实现该接口
  • 上下文(Context)维护当前状态并调用其方法
  • 状态转移由上下文或外部事件触发

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381589.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从输入 URL 到页面展示到底发生了什么

从输入 URL 到页面展示到底发生了什么呢? 1.在浏览器输入一个域名回车 2.首先会先检查浏览器缓存里是否有缓存资源,如果缓存中有,会直接在浏览器上显示页面内容,如果没有,在发送http请求之前,浏览器会向D…

设计模式-抽象工厂

抽象工厂属于创建型模式。 抽象工厂和工厂设计模式的区别: 工厂模式的是设计模式中最简单的一种设计模式,主要设计思想是,分离对象的创建和使用,在Java中,如果需要使用一个对象时,需要new Class()&#xff…

Step-DPO 论文——数学大语言模型理解

论文题目:STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS 翻译为中文就是:“LLMs长链推理的逐步偏好优化” 论文由港中文贾佳亚团队推出,基于推理步骤的大模型优化策略,能够像老师教学生一样优…

Vulnhub靶场DC-7练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后,⽤户进程就进⼊到了内核态,通过执⾏⼀系列的内核协议层函数,然后到 socket 对象的接收队列中查看是否有数据,没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令

配置FTP服务 一.前言 博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且…

巧用Vue3 composition api的计算属性实现扁平化tree连线

本示例节选自vue3最新开源组件实战教程大纲(持续更新中)的tree组件开发部分。将进一步把基于Vue3 composition api的computed计算属性特性应用到组件开发实战中,继续以最佳实践的方式呈现给大家。 下面我们要实现的是扁平化的dom结构所呈现的…

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

最新缺失msvcp140.dll的多种解决方法,有效解决电脑dll问题

msvcp140.dll 是一个关键的动态链接库(DLL)文件,属于 Microsoft Visual C 2015 Redistributable 的一部分。它为使用 Microsoft Visual C 编译的应用程序提供了运行时支持,确保这些应用程序能够正常运行。以下是对 msvcp140.dll 的…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错,调用的目标发生了异常,Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象,鼠标没有移动痕迹&#xff0c…

Docker无法拉取镜像!如何解决?

问题现象 继去年Docker Hub被xxx后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又…

Flink源码学习资料

Flink系列文档脑图 由于源码分析系列文档较多,本人绘制了Flink文档脑图。和下面的文档目录对应。各位读者可以选择自己感兴趣的模块阅读并参与讨论。 此脑图不定期更新中…… 文章目录 以下是本人Flink 源码分析系列文档目录,欢迎大家查阅和参与讨论。…

爬取百度图片,想爬谁就爬谁

前言 既然是做爬虫,那么肯定就会有一些小心思,比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站,点击搜索xxx,打开后,滚动滚动条,发现滚动条越来越小,说明图片加载…

springboot 配置 spring data redis

1、在pom.xml引入父依赖spring-boot-starter-parent&#xff0c;其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构&#xff0c;它是由 n(n>0)个有限节点组成的一个具有层次关系的集合&#xff0c;它的外观形似一颗倒挂着的树&#xff0c;根朝上&#xff0c;叶朝下&#xff0c;所以称呼为树。每颗子树的根节点有且只…

泛型新理解

1.创建三个类&#xff0c;并写好对应关系 package com.jmj.gulimall.study;public class People { }package com.jmj.gulimall.study;public class Student extends People{ }package com.jmj.gulimall.study;public class Teacher extends People{ }2.解释一下这三个方法 pub…

浅谈芯片验证中的仿真运行之 timescale (五)提防陷阱

一 仿真单位 timeunit 我们知道,当我们的代码中写清楚延时语句时,若不指定时间单位,则使用此单位; 例如: `timescale 1ns/1ps 则 #15 语句表示delay15ns; 例:如下代码,module a 的timescale是1ns/1ps, module b 是1ps/1ps; module b中的clk,频率是由输入参…

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法

首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api 1 2 3 4 5 6 7 8 9 uni.request({ url: , method: GET, data: {}, header: {}, success: res > {}, fail: () > {}, complete: () > {} }); 可以看到我们每次请求数据的时候都需…

一文掌握Prometheus实现页面登录认证并集成grafana

一、接入方式 以保护Web站点的访问控制&#xff0c;如HTTP 服务器配置中实现安全的加密通信和身份验证&#xff0c;保护 Web 应用程序和用户数据的安全性。 1.1 加密密码 通过httpd-tools工具包来进行Web站点加密 yum install -y httpd-tools方式一&#xff1a;通过htpasswd生…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…