当前位置: 首页 > news >正文

面向对象设计规则和各类设计模式

面向对象设计(Object-Oriented Design, OOD)是一种软件设计方法论,它使用对象、类、继承、封装、多态等概念来组织代码。面向对象设计的核心目标是提高软件的可维护性、可扩展性和复用性。在面向对象设计中,遵循一定的设计原则和模式可以帮助开发者更好地达到这些目标。

面向对象设计的原则

  1. 单一职责原则 (Single Responsibility Principle, SRP): 一个类应该只有一个引起它变化的原因。这意味着每个类应该只负责一个功能领域。

  2. 开闭原则 (Open/Closed Principle, OCP): 软件实体(类、模块、函数等等)应该是可以扩展的,但是不可修改。当需要给系统增加新功能的时候,可以通过添加新的代码来实现,而不是修改已有的代码。

  3. 里氏替换原则 (Liskov Substitution Principle, LSP): 子类型必须能够替换它们的基类型。即子类可以完全替代父类出现在程序中的任何地方,而不会影响程序的正确性。

  4. 接口隔离原则 (Interface Segregation Principle, ISP): 客户端不应该依赖于它不使用的接口。也就是说,不应该强迫客户程序依赖于它们不用的方法。

  5. 依赖倒置原则 (Dependency Inversion Principle, DIP): 高层次的模块不应该依赖低层次的模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

设计模式

设计模式是在特定情况下解决特定问题的一种模板或蓝图。根据目的的不同,设计模式大致可以分为三类:

  1. 创建型模式:这些模式与对象的创建有关,它们提供了一种创建对象的最佳方式。包括:

    • 单例模式 (Singleton)
    • 工厂方法模式 (Factory Method)
    • 抽象工厂模式 (Abstract Factory)
    • 建造者模式 (Builder)
    • 原型模式 (Prototype)
  2. 结构型模式:这些模式处理类或对象的组合。包括:

    • 适配器模式 (Adapter)
    • 桥接模式 (Bridge)
    • 组合模式 (Composite)
    • 装饰模式 (Decorator)
    • 外观模式 (Facade)
    • 享元模式 (Flyweight)
    • 代理模式 (Proxy)
  3. 行为型模式:这些模式特别关注对象之间的通信。包括:

    • 责任链模式 (Chain of Responsibility)
    • 命令模式 (Command)
    • 解释器模式 (Interpreter)
    • 迭代器模式 (Iterator)
    • 中介者模式 (Mediator)
    • 备忘录模式 (Memento)
    • 观察者模式 (Observer)
    • 状态模式 (State)
    • 策略模式 (Strategy)
    • 模板方法模式 (Template Method)
    • 访问者模式 (Visitor)

每种设计模式都有其适用场景,合理地选择和应用设计模式可以有效提升软件的设计质量和开发效率。然而,过度使用设计模式也会导致系统变得复杂,因此在实际应用中应权衡利弊,灵活运用。

 

相关文章:

面向对象设计规则和各类设计模式

面向对象设计(Object-Oriented Design, OOD)是一种软件设计方法论,它使用对象、类、继承、封装、多态等概念来组织代码。面向对象设计的核心目标是提高软件的可维护性、可扩展性和复用性。在面向对象设计中,遵循一定的设计原则和模…...

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(六)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(六) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...

利用Docker分层构建优化镜像大小

合适docker镜像文件大小不仅影响容器启动效率,也影响资源占用效率。本文介绍如何利用分层方式构建docker镜像,采用多种方式避免镜像文件太大而影响性能。 Docker 镜像大小优化的重要性 资源利用效率 较小的镜像文件在存储和传输过程中占用更少的空间和带…...

Spring 魔法探秘:从 Bean 线程安全到事务魔法全解析

1.Spring 框架中的单例 Bean 是线程安全的么? Spring 框架中的单例 Bean 本身并不保证线程安全性。单例模式意味着在整个应用程序的生命周期中,只会创建该 Bean 的一个实例,并且所有对该 Bean 的请求都将共享这个实例。 线程安全与否取决于…...

[Maven]IDEA父工程创建子工程后父工程不可运行

IDEA在使用maven构建项目时,如果你在当前工程下创建一个子工程,那么原有的工程(变为父工程的工程)原有的代码通常会变得不可运行。 这是因为,使用maven创建父子工程关系后,IDEA会自动变更项目的模块相关配置。 比如这是我maven工程…...

【系统移植】在开发板上加载内核和根文件系统的三种方法

实现环境:ubuntu24.04和FS4412实验平台。 要在开发板上运行linux操作系统,首先要将linux内核镜像(uImage)、设备树(dexynos4412-fs4412.dtb)和根文件系统镜像(ramdisk.img)加载到开发板内存。有以下几种方式加载: 一、通过tftp加载内核和根文件系统 二、通过EMMC加…...

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

数据结构-排序(来自于王道)

排序的基本概念 插入排序 在这个算法中,除了输入的数组本身,没有使用额外的数据结构来存储数据,所有的操作都是在原数组上进行的。因此,无论输入数组的大小 n 是多少,算法执行过程中所占用的额外空间是固定的&#xff…...

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scr…...

ReactPress最佳实践—搭建导航网站实战

Github项目地址:https://github.com/fecommunity/easy-blog 欢迎Star。 近期,阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress,ReactPress一个基于 Next.js 的博客和 CMS 系统,可查看 demo站点。(…...

Hive-4.0.1数据库搭建(可选配置用户名密码远程连接)

1.官网下载tar包上传到服务器并解压&#xff08;我这里解压到了hive目录): 2.进入到conf目录&#xff0c;并复制模板配置文件进行修改&#xff1a; cd /apache-hive-4.0.1-bin/conf cp hive-default.xml.template hive-site.xml3.编写内容如下&#xff1a; <property>&…...

P8772 求和 P8716 回文日期

文章目录 [蓝桥杯 2022 省 A] 求和[蓝桥杯 2020 省 AB2] 回文日期 [蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a…...

MySQL迁移SQLite

将 MySQL 的表结构和数据迁移到 SQLite&#xff0c;可以通过以下步骤实现。这个过程主要包括导出 MySQL 数据库到 SQL 文件&#xff0c;然后将其导入到 SQLite 数据库中。 步骤 1: 导出 MySQL 数据库 首先&#xff0c;需要将 MySQL 数据库导出为一个 SQL 文件。可以使用 mysq…...

RocketMQ中的顺序消息和乱序消息详解

内容编辑中… 1.背景 顺序消息是消息队列 RocketMQ 提供的一种高级消息类型。 对于一个指定的Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费。 即先发送的消息先消费,后发送的消息后消费。 顺序消息在发送、存储和投递的处理过程中,强调多条消息间的先后…...

Unity UGUI图片循环列表插件

效果展示&#xff1a; 下载链接&#xff1a;https://gf.bilibili.com/item/detail/1111843026 概述&#xff1a; LoopListView2 是一个与 UGUI ScrollRect 相同的游戏对象的组件。它可以帮助 UGUI ScrollRect 以高效率和节省内存的方式支持任意数量的项目。 对于具有10,000个…...

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台&#xff0c;总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者&#xff0c;或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多&#xff0c;诉求也各有不同&#xff…...

AI Chat API 对接说明

AI Chat API 对接说明 我们知道&#xff0c;市面上一些问答 API 的对接还是相对没那么容易的&#xff0c;比如说 OpenAI 的 Chat Completions API&#xff0c;它有一个 messages 字段&#xff0c;如果要完成连续对话&#xff0c;需要我们把所有的上下文历史全部传递&#xff0…...

Thread线程基础使用

多线程目的&#xff1a;其实就是希望“并行”执行多任务&#xff0c;提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…...

【Linux】结构化命令

结构化命令structured command&#xff1a;允许脚本根据条件跳过部分命令&#xff0c;改变执行流程。 1、if-then语句 格式1&#xff1a; if command then commands fi 格式2&#xff1a; if command; then commands fi 运行if之后的command命令&#xff0c;如果它的退出状态码…...

ElasticSearch01-概述

零、文章目录 ElasticSearch01-概述 1、Elastic Stack &#xff08;1&#xff09;简介 官网地址&#xff1a;https://www.elastic.co/cn/ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际…...

告别手动核对:这款TXT对比工具如何成为你的效率倍增器

1. 为什么你需要一款TXT对比工具 每天面对成堆的文本文件&#xff0c;你是不是经常遇到这样的场景&#xff1a;领导发来两个版本的合同让你核对修改点&#xff0c;同事传来两份客户名单要你合并去重&#xff0c;产品经理扔过来几百条用户反馈要你筛选关键词...手动处理这些任务…...

2026年海外高校AIGC检测现状:留学生如何应对不同平台要求

2026年海外高校AIGC检测现状&#xff1a;留学生如何应对不同平台要求 都在担心AI率被查出来&#xff0c;但真正该注意的可能不是你以为的那些事。 关于海外高校AIGC检测&#xff0c;我研究了一段时间发现&#xff0c;很多流传的「攻略」其实是错的。真正有效的应对方式&#…...

在 openSUSE Tumbleweed 上为 Canon LBP2900 配置网络打印:从驱动安装到 CUPS 调试

1. 准备工作&#xff1a;驱动下载与依赖安装 Canon LBP2900 虽然是一款经典机型&#xff0c;但官方对 Linux 的支持一直比较保守。我去年在给公司部署办公环境时就遇到过这个坑&#xff0c;当时花了两天时间才搞明白驱动安装的门道。首先需要从佳能官网下载专用驱动包&#xff…...

Comsol三维耦合冲头温度及传热与应力模型参考案例

Comsol三维耦合冲头温度&#xff0c;固体和流体传热&#xff0c;压铸传热与应力模型 可直接联系&#xff0c;此模型为参考案例车间里的压铸机轰鸣声不断&#xff0c;模具表面温度计指针疯狂跳动——这场景熟悉吧&#xff1f;压铸工艺里温度场和应力场就像一对相爱相杀的CP&…...

OpenClaw模型切换指南:Kimi-VL-A3B-Thinking与其他多模态模型对比测试

OpenClaw模型切换指南&#xff1a;Kimi-VL-A3B-Thinking与其他多模态模型对比测试 1. 为什么需要模型对比测试 在OpenClaw的实际使用中&#xff0c;我发现多模态模型的选择直接影响自动化任务的成败。上个月尝试用AI助手处理一份包含图表和文字的调研报告时&#xff0c;不同模…...

Python flask django高校学生绩点成绩预警管理系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析预警规则设置数据可视化与报表系统安全与扩展技术实现参考项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户管…...

UPnP_Generic库:嵌入式设备自动端口映射实战指南

1. UPnP_Generic库深度技术解析&#xff1a;嵌入式设备自动端口映射的工程实践1.1 为什么嵌入式开发者需要UPnP_Generic库在嵌入式物联网项目中&#xff0c;当设备需要从公网访问本地Web服务&#xff08;如传感器数据页面、远程控制接口或OTA升级服务器&#xff09;时&#xff…...

Arduino控制乐歌/升谱电动升降桌的UART物联网方案

1. 项目概述LoctekMotion_IoT_arduino 是一个面向 Loctek Motion&#xff08;国内常称“乐歌”&#xff09;与 FlexiSpot&#xff08;国内常称“升谱”&#xff09;品牌电动升降桌的开源 Arduino 控制库&#xff0c;核心目标是将传统电动升降桌改造为具备物联网能力的智能办公终…...

STC51单片机串口ISP下载程序全攻略

1. STC51单片机ISP串口下载程序详解作为一名嵌入式开发工程师&#xff0c;我经常需要给各种单片机下载程序。STC51系列单片机因其性价比高、开发简单而广受欢迎。今天我就来详细讲解STC51单片机通过串口ISP下载程序的全过程&#xff0c;包括硬件连接、软件配置和常见问题处理。…...

ThorUI-uniapp插件生态解析:如何扩展你的开发能力

ThorUI-uniapp插件生态解析&#xff1a;如何扩展你的开发能力 【免费下载链接】ThorUI-uniapp dingyong0214/ThorUI-uniapp: 是一个基于 ThorUI 的 UniApp UI 库&#xff0c;适合用于 UniApp 开发中的 UI 设计和实现。 项目地址: https://gitcode.com/gh_mirrors/th/ThorUI-u…...