༺༽༾ཊ—设计-简介-模式—ཏ༿༼༻
我对设计模式的理解就是一种可复用的且面向对象的设计工具,它与代码无关,我们可以利用设计模式设计出高内聚、低耦合的应用程序,并且最大程度实现程序的复用,以应对复杂的需求变化。
程序的可复用性就是用已存在的程序模块进行更新;
高内聚就是我有一组相互关联,紧密依赖的一些方法,我们需要将这些方法封装在一个类中
低耦合就是减少两个类或者多个类之间的相互依赖;
为了设计出高内聚、低耦合的应用程序,总结了七个原则:
1.单一职责原则;
2.依赖倒置原则;
3.开闭原则;
4.接口隔离原则;
5.里氏替换原则;
6.合成复用原则;
7.迪米特原则;
设计模式大致分为三种类型:
1.创建型设计模式;
用于对象的创建,有五种类型:
①单例(Singleton)模式;
②工厂方法(FactoryMethod)模式;
③抽象工厂(AbstractFactory)模式;
④建造者(Builder)模式;
⑤原型(Prototype)模式;
2.结构型设计模式;
用于对象和对象的组合/类与类的组合,组合后的对象或者类更利于扩展,有七种类型:
①组合(Composite)模式;
②适配器(Adapter)模式;
③包装器(Wrapper)/ 装饰器(Decorator)模式;
④桥接(Bridge)模式;
⑤外观(Facade)模式;
⑥享元(Flyweight)模式;
⑦代理(Proxy)模式;
3.行为型设计模式;
用于解决对类和对象之间的交互与方法分配问题,有十一种类型:
①状态(State)模式;
②策略(Strategy)模式;
③命令(Command)模式;
④访问者(Visitor)模式;
⑤解释器(Interpreter)模式;
⑥观察者(Observer)模式;
⑦责任链(ChainOfResponsibility)模式;
⑧迭代器(Iterator)模式;
⑨中介者(Mediator)模式;
⑩备忘录(Memento)模式;
⑩+①:模板方法(TemplateMethod)模式;
总结:学好设计模式需要明白两点,第一七个原则,第二23种设计模式。
相关文章:
༺༽༾ཊ—设计-简介-模式—ཏ༿༼༻
我对设计模式的理解就是一种可复用的且面向对象的设计工具,它与代码无关,我们可以利用设计模式设计出高内聚、低耦合的应用程序,并且最大程度实现程序的复用,以应对复杂的需求变化。 程序的可复用性就是用已存在的程序模块进行更新…...
Matplotlib快速入门,Python通用的绘图工具库上手
Matplotlib是一个用于Python编程语言的综合性绘图库。 它可以生成各种类型的图表,包括折线图、条形图、散点图、直方图、饼图等。Matplotlib支持多种数据格式,包括NumPy数组、Pandas DataFrame和CSV文件。它还可以从URL读取数据。 Matplotlib可以在交互…...
Linux 基本语句_16_Udp网络聊天室
代码: 服务端代码: #include <stdio.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h> #include <string…...
使用ffmpeg命令进行视频格式转换
1 ffmpeg介绍 FFmpeg 是一个非常强大和灵活的开源工具集,用于处理音频和视频文件。它提供了一系列的工具和库,可以用于录制、转换、流式传输和播放音频和视频。 FFmpeg 主要特点如下: 格式支持广泛:FFmpeg 支持几乎所有的音频和视…...
Mac安装Adobe AE/pr/LR/ai/ps/au/dw/id 2024/2023报错问题解决(常见错误:已损坏/2700/146/130/127)
1.打开允许“允许任何来源” 如何打开允许任何来源?在 Finder 菜单栏选择 【前往】 – 【实用工具 】,找到【终端】程序,双击打开,在终端窗口中输入:sudo spctl --master-disable 输入代码后,按【return …...
Python三级 每周练习题31
如果你感觉有收获,欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 练习一: 作业1:编写程序,在下面的字典中找出身高137的同学并输出姓名,如果没找到, 输出没有 a{‘小赵’:136,‘小钱’:141,‘小孙’:146,‘小李’:13…...
【DataSophon】大数据服务组件之Flink升级
🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…...
Android笔记(十八):面向Compose组件结合Retrofit2和Rxjava3实现网络访问
一、Retrofit2 Square公司推出的Retrofit2库(https://square.github.io/retrofit/),改变了网络访问的方式。它实现了网络请求的封装。Retrofit库采用回调处理方式,使得通过接口提交请求和相应的参数的配置,就可以获得…...
mybatis中oracle的sql没走索引导致特别慢(未加jdbcType的)
如果直接跑sql是能走索引很快,在mybatis中不能,可能就是jdbcType的原因。 比如,我有一个属性A,在表里面是VARCHAR2类型,但是在mybatis中的sql是#{a},缺少jdbcTypeJdbcType.VARCHAR,就会导致myba…...
QT自带打包问题:无法定位程序输入点?metaobject@qsound
文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置:打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后,相应的release文件夹下的exe文件,无法打开 如有错误欢迎指出 检查系…...
7.3 lambda函数
一、语法 1.基础语法 [capture](paramLists) mutable ->retunType{statement} capture。捕获列表,用于捕获前文的变量供lambda函数中使用,可省略。(paramLists)。参数列表,可省略。mutable。lambda表达式默认具有常量性,可以…...
dcoker-compose一键部署EFAK —— 筑梦之路
简介 EFAK(Eagle For Apache Kafka,以前称为 Kafka Eagle)是一款由国内公司开源的Kafka集群监控系统,可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息,并进行可视化图表展示。独…...
音视频:Ubuntu下安装 FFmpeg 5.0.X
1.安装相关依赖 首可选一: sudo apt-get update sudo apt-get install build-essential autoconf automake libtool pkg-config \libavcodec-dev libavformat-dev libavutil-dev \libswscale-dev libresample-dev libavdevice-dev \libopus-dev libvpx-dev libx2…...
【LSM tree 】Log-structured merge-tree 一种分层、有序、面向磁盘的数据结构
文章目录 前言基本原理读写流程写流程读流程 写放大、读放大和空间放大优化 前言 LSM Tree 全称是Log-structured merge-tree, 是一种分层,有序,面向磁盘的数据结构。其核心原理是磁盘批量顺序写比随机写性能高很多,可以通过围绕这一原理进行…...
配置OSPF与BFD联动示例
定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测机制。 BFD对两个系统间的、同一路径上的同一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。 …...
01到底应该怎么理解“平均负载”
1、如何了解系统的负载情况? 每次发现系统变慢时, 我们通常做的第⼀件事, 就是执⾏top或者uptime命令, 来了解系统的负载情况。 ⽐如像下⾯这样, 我在命令⾏⾥输⼊了uptime命令, 系统也随即给出了结果。 …...
jmeter,动态参数之随机数、随机日期
通过函数助手,执行以下配置: 执行后的结果树: 数据库中也成功添加了数据,对应字段是随机值:...
uniApp常见知识点-问题答案
1、uniApp中如何进行页面跳转? 答案:可以使用 uni.navigateTo、uni.redirectTo 和 uni.reLaunch 等方法进行页面跳转。其中,uni.navigateTo可以实现页面的普通跳转, uni.redirectTo可以实现页面的重定向跳转, uni.reL…...
云原生基础入门概念
文章目录 发现宝藏云原生的概念云原生的关键技术为何选择云原生?云原生的实际应用好书推荐 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 云原生的概念 当谈及现…...
一个 tomcat 下如何部署多个项目?附详细步骤
一个tomcat下如何部署多个项目?Linux跟windows系统下的步骤都差不多,以下linux系统下部署为例。windows系统下部署同理。 1 不修改端口,部署多个项目 清楚tomcat目录结构的应该都知道,项目包是放在webapps目录下的,那…...
APK Installer终极指南:在Windows电脑上高效安装Android应用
APK Installer终极指南:在Windows电脑上高效安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了在Windows电脑上运行Android应用需…...
面试题详解:提示词工程 Prompt Engineering 全攻略——大模型提示词、RAG Prompt、Agent Prompt、Tool Calling、结构化输出与安全防护一次讲透
1. 什么是提示词工程?1.1 提示词不是“咒语”,而是模型的工作说明书提示词工程,通俗地说,就是把你想让大模型完成的任务,用模型更容易理解、更容易执行、更容易稳定复现的方式写出来。它不是玄学,也不是简单…...
如何用D2DX游戏优化工具突破《暗黑破坏神2》25fps限制:宽屏适配与性能提升的终极解决方案
如何用D2DX游戏优化工具突破《暗黑破坏神2》25fps限制:宽屏适配与性能提升的终极解决方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/…...
claude code用户如何通过taotoken解决账号封禁与token不足难题
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Claude Code 用户如何通过 Taotoken 解决账号封禁与 Token 不足难题 对于深度依赖 Claude Code 作为编程助手的开发者而言…...
分布式系统与微服务架构:从核心原理到Java开发实战
1. 分布式系统平台:从背景到实战应用的深度剖析在软件开发领域,尤其是企业级应用和互联网服务的构建中,“分布式”早已不是一个新鲜词汇,而是工程师们日常打交道的核心范式。我们常听到J2EE、.NET、微服务这些名词,它们…...
现在不掌握NotebookLM航天科研工作流,你将错过下一轮国家重大专项申报窗口期——3大航天高校已启用的AI原生课题孵化模板首次解密
更多请点击: https://intelliparadigm.com 第一章:NotebookLM航天科学研究 NotebookLM 是 Google 推出的基于 AI 的研究协作者工具,专为处理长文档、技术报告与多源文献而设计。在航天科学研究中,其语义理解能力与引用溯源机制可…...
基于I2C总线与ATtiny85的RGB LCD时钟:在5个GPIO上实现多设备驱动
1. 项目概述:当微型控制器遇上彩色显示屏几年前,我在为一个智能花盆项目寻找显示方案时遇到了一个经典难题:手头的Adafruit Trinket(基于ATtiny85)只有5个可用GPIO,而一个能显示温湿度、时间的16x2字符LCD屏…...
终极Windows 11优化指南:使用Win11Debloat开源工具提升系统性能的完整方案
终极Windows 11优化指南:使用Win11Debloat开源工具提升系统性能的完整方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes …...
3小时从零掌握yuzu:在PC上畅玩任天堂Switch游戏的完整指南
3小时从零掌握yuzu:在PC上畅玩任天堂Switch游戏的完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在Windows、Linux或Android设备上免费体验任天堂Switch游戏吗?yuzu模拟器正是你…...
Web NFC技术入门:在浏览器中实现NFC标签读写与信息管理
1. 项目概述:当NFC遇见浏览器作为一名在嵌入式系统和物联网领域摸爬滚打了十多年的开发者,我经历过无数次需要将物理设备与数字世界连接起来的项目。从早期的红外、蓝牙,到后来的RFID,每次技术迭代都试图让这种连接变得更无缝、更…...
