原学之设计模式- 设计模式来源

引言

各位旅行者们你们好,我是小森,首先我为啥是程序员。学了技术快六年了,但一直都是断断续续,本身自己的条件,从2021年11月份开始下载原神,总而言之不了解一些抽卡机制导致退了并且删除了具体账号打算重新了解,从原神4.0开始了解抽卡机制后,彻底迷上了 ‘巴巴托斯‘’’白丝舔舔舔(个人癖好)。话说回来这个诶嘿让人感觉不靠谱,哈哈哈 当然剧情方面来看塑造出该溜子是对他对自由之神而言无人称霸,解放蒙德这块地方才是最稳的 然后化身为吟游诗人 温迪。
回到故事文章本身 米哈游这家公司技术实力还是不错的,至少在u3d 引擎 魔改方面,佩服

话说回来设计模式起源 :是随着面向对象语言开始流行 大家发现这个有搞头所以三位大佬站出来一套通用的设计思想诞生,‘

’设计模式“
是由Gof三位大佬提出基于面向对象核心(封装继承多态)扩展 对现实生活运用到面向对象程序设计里

什么是类和对象
类:可以是被自定义 人类属于古猿类 所谓的物语类,人以群分 人类有很多特点(在这里穿插一个情绪化内容,人有选择,你居然选择了原神没必要可生气,玩个游戏还宣泄,搞不懂这是在干什么,难道你不就是因为生活没有希望想玩玩游戏顺便社交? 若是这样建议不玩,搞得好像游戏公司都得是仇人一样这种人尽量远离 并且, 还有一些玩出攻略得值得珍惜 视频平台该怎么说呢他也是服务业,一些人就发动乱象搞信息茧房 ,然后平台还扶持 不作死平台,点名某二次元一哥平台 流量才是你的财报? 发个牢骚而已不必要代入若你在意 你也跟动不动就动手,该锄大地的玩家就去锄大地 ,前提是你的尊重难道选择,剧情我看来 比某些神人电视剧好看多了 ,你要是不同意就不要往下看若你还往下看,就拉黑你 ,当然我会做成视频 )
好了继续 人类有很多特点(不要具体想象成把自己想象成人造人啊) ,人造物 甚至龙工智能…
当然机器人从机械臂开始发展不到十几年精准的工业化生产,当然机械臂取代人类了吗很明显不能运输还得靠人 以及制造业

对象是面向对象编程(Object-Oriented Programming, OOP)中的一个核心概念,指的是类的实例化产物。在编程中,对象将数据(属性)和行为(方法)封装为一个整体,具有以下特点:

  1. 属性(Properties):对象包含的数据特征

    • 例如:一个"汽车"对象可能具有品牌、颜色、最高时速等属性
    • 属性可以是基本数据类型(整数、字符串等)或其他对象
  2. 方法(Methods):对象能执行的操作

    • 例如:"汽车"对象可能有启动、加速、刹车等方法
    • 方法定义了对象的行为和功能
  3. 封装性(Encapsulation):

    • 对象对外隐藏内部实现细节
    • 通过定义公共接口(public interface)来与外界交互
    • 例如:用户只需知道如何调用"启动"方法,无需了解引擎如何工作
  4. 实际应用场景:

    • 在电商系统中:"订单"对象包含订单号、商品列表、总价等属性,以及计算总价、生成发票等方法
    • 在游戏开发中:"玩家"对象包含生命值、位置等属性,以及移动、攻击等方法

对象是构建复杂软件系统的基础单元,通过对象间的交互和组合,可以实现更高级的功能和业务逻辑。

面向对象编程(OOP)是一种程序设计范式,它以"对象"为核心,将数据和操作数据的方法组织在一起。让我们详细回顾面向对象的三大基本特性:

  1. 封装(相当于黑盒子)

    • 具体表现:将数据和操作数据的方法捆绑在一起
    • 实现方式:通过访问修饰符(public/private/protected)控制访问级别
    • 实际应用示例:
      • 银行账户类:隐藏余额具体数值,只提供存/取款接口
      • 汽车类:隐藏发动机内部构造,只提供启动/加速接口
    • 优势:提高安全性,降低耦合度,便于维护
  2. 继承(代码复用机制)

    • 具体表现:子类继承父类的属性和方法
    • 实现方式:extends关键字
    • 实际应用示例:
      • 图形类作为父类,圆形/矩形类继承
      • 动物类作为父类,猫/狗类继承
    • 优势:减少重复代码,提高可扩展性
  3. 多态(同一接口不同实现)

    • 具体表现:父类引用指向子类对象
    • 实现方式:方法重写(Override)和接口实现
    • 实际应用示例:
      • 图形类定义draw()方法,不同子类实现不同绘制方式
      • 支付接口,不同支付方式实现不同支付逻辑
    • 优势:提高程序灵活性,增强可维护性

其他重要概念:

  • 抽象类:包含抽象方法的类,不能被实例化
  • 接口:完全抽象的类,只包含方法声明
  • 对象关系:关联、聚合、组合等
  • 设计原则:SOLID原则(单一职责、开闭原则等)

实际开发中的应用场景:

  1. GUI程序开发:按钮、窗口等组件都是对象
  2. 游戏开发:角色、道具等都是对象
  3. 企业级应用:订单、客户等业务实体作为对象

常见面试问题扩展:

  • 重载(Overload)和重写(Override)的区别
  • 抽象类和接口的使用场景
  • 组合优于继承原则的理解
  • 设计模式中的面向对象应用

设计模式的起源与发展

设计模式的概念并非凭空产生,而是源于建筑学领域,后经计算机科学家的系统化整理和提炼,最终形成了我们今天所熟知的软件设计模式体系。

建筑学领域的启发

设计模式的概念最早可以追溯到1977年,由美国建筑师克里斯托弗·亚历山大(Christopher Alexander)在其著作《建筑模式语言》(A Pattern Language)中提出。亚历山大观察到,在建筑设计中存在一些反复出现的优秀解决方案,他将其系统化为253个"模式",每个模式都描述了特定环境下的设计问题及其解决方案。

软件工程的引入

1990年,Kent Beck和Ward Cunningham首次将模式概念引入软件工程领域。他们发现软件设计中同样存在反复出现的问题和相应的优秀解决方案。这一发现为后来的软件设计模式研究奠定了基础。

GoF的里程碑贡献

1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(被称为"四人帮"或GoF)合著的《设计模式:可复用面向对象软件的基础》一书出版。这本著作系统地归纳了23种经典的设计模式,将它们分为创建型、结构型和行为型三大类,并提供了统一的描述格式:

  1. 模式名称:便于交流的简短标识
  2. 问题:描述何时应用该模式
  3. 解决方案:模式的具体内容
  4. 效果:模式的优势和可能的缺点

后续发展

GoF的模式体系成为基础后,设计模式研究持续发展:

  1. 领域扩展:陆续出现了并发模式、企业应用模式、分布式系统模式等
  2. 模式语言:形成了更系统化的模式分类和关系描述
  3. 反模式:研究常见的不良设计实践及其解决方案
  4. 现代应用:在新兴技术领域如微服务、云计算中继续演化

设计模式的意义

设计模式的价值主要体现在:

  1. 共享词汇:为开发者提供统一的交流语言
  2. 经验复用:避免重复造轮子,继承优秀设计经验
  3. 设计指导:为解决特定问题提供经过验证的方案
  4. 文档工具:提高系统设计的可理解性和可维护性

设计模式不是一成不变的教条,而是需要根据具体场景灵活运用的工具。随着软件开发实践的演进,设计模式体系也在不断丰富和发展。

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

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

相关文章

有鹿机器人:AI技术如何重新定义「扫地」这件小事?

当扫地成为一门“技术活”扫地,可能是人类最古老的清洁行为之一。从扫帚到吸尘器,再到今天的无人驾驶清洁设备,我们一直在寻找更高效、更彻底的方式维护环境整洁。但有鹿机器人的出现,让“扫地”这件事有了新的定义——它不再只是…

62.不同路径

dp问题描述 62.不同路径 确定本题的状态表示 dp[i,j]表示的是从左上角走到这个位置的路径条数 确定本题的状态转移方程 根据已知条件:dp[0,0]1,dp[0,1]1,dp[1,0]1 本题的状态转移方程是: dp[i,j]dp[i,j-1]dp[i-1,j] 填表求…

python---包

文章目录包的基本概念创建包的基本结构__init__.py文件导入包和模块相对导入(在包内部使用)导入包和导入模块的区别包是Python中组织模块的一种方式,它允许你将相关的模块分组在一起,形成一个层次结构。包的主要目的是帮助避免命名…

超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解

因为yolo的检测/分割/姿态/旋转/分类模型的环境配置、训练、推理预测等命令非常类似,这里不再详细叙述环境配置,主要参考【超详细yolo8/11-detect目标检测全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c/python)详解】&#xf…

创世理论达成 全关联的动态振动网:量子世界的“底层逻辑”

全关联的动态振动网:量子世界的“底层逻辑”(不带公式,超级详细)要真正理解量子世界的本质,我们需要跳出“粒子”和“波”的传统框架,从量子场论的核心逻辑出发,用最生活化的类比和日常经验&…

银行间交易IMIX协议加密相关

加密流程 字段筛选与序列化 提取业务报文中标记为敏感的字段&#xff0c;生成待加密的数据块 <!-- 示例&#xff1a;原始交易指令 --> <Order><Symbol>ABC123</Symbol> <!-- 非敏感 --><Price>100.50</Price> …

ABM和强化学习-2015年全国大学生数学建模竞赛B题

多智能体系统&#xff08;Agent-Based Model, ABM&#xff09;和强化学习&#xff08;Reinforcement Learning, RL&#xff09;是两个不同但可结合的概念&#xff0c;尤其在复杂系统建模和人工智能领域有重要应用。下面分别解释它们&#xff0c;并说明二者的关联&#xff1a; …

ALBEF/BLIP/BLIP2/Instruct BLIP/X Instruct BLIP

ALBEF 研究动机 ALBEF之前的一些方式&#xff0c; 视觉分支基本都是基于 dector的方式&#xff08;检出目标框&#xff09;&#xff0c;如下图所示&#xff0c;由于大量的数据没有标框&#xff0c;因此视觉预训练的受限于dector的检测方式。创新点 能不能不再采用dector的方式训…

数据结构——排序算法(简单篇:冒泡排序、选择排序、插入排序)

1️⃣ 冒泡排序&#xff08;Bubble Sort&#xff09; 基本思想 重复地比较相邻的两个元素&#xff0c;如果顺序错误就交换它们。一趟冒泡结束后&#xff0c;最大&#xff08;或最小&#xff09;的元素会“浮”到末尾。下一趟时可以少比较一次&#xff0c;因为最后的元素已经排好…

配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题

一、概述 记录时间 [2025-08-16] 在 Docker 学习中&#xff0c;可能会遇到诸如 docker 远程仓库无法访问、docker pull 拉取镜像失败、docker search 查询镜像失败等问题。 这是由于国内网络对 docker 远程仓库的访问受到限制。 那么在国内如何获取 docker 镜像呢&#xff1f…

【Python】Python 面向对象编程详解​

Python 面向对象编程详解​ 文章目录Python 面向对象编程详解​前言一、面向对象的基本概念​1.1 类&#xff08;Class&#xff09;​1.2 对象&#xff08;Object&#xff09;​1.3 属性&#xff08;Attribute&#xff09;​1.4 方法&#xff08;Method&#xff09;​二、类的定…

Redis 缓存和 Redis 分布式锁

目录 Redis 缓存 (Caching) 目的 核心逻辑 存储形式总结 典型场景 Redis 分布式锁 (Distributed Lock) 目的 核心作用 核心逻辑 典型场景 核心区别总结 Redis 缓存 (Caching) 在Redis中&#xff0c;数据是以键值对的形式存储的&#xff0c;其中键总是字符串类型&…

[ java 基础 ] 了解编程语言的第一步

目录 一. IDE (1). 使用IDE的原因: (2). 创建和使用: (3). 常用快捷方式与设置 (4). 注释 (5). 关键字 (6). 标识符 (7). 变量 (8). 数据类型 1) 整数类型 2) 浮点类型 3) 布尔类型(boolean) 4) 字符类型(char) 5) 字符串 6) 基本数据类之间的转换 (9). 运算符…

JavaScript 闭包与递归深度解析:从理论到实战

本文将系统梳理 JavaScript 中闭包与递归的核心概念、实战应用及面试要点,涵盖课堂知识点、作业实现、面试题解析等内容,帮助你全面掌握这两大重要概念。 一、闭包:函数与变量的绑定艺术 1.1 闭包的定义与核心特性 闭包是 JavaScript 中一种特殊的语言现象,其核心定义可…

牛 CDR3 单抗:抗病毒领域的 “纳米级精准导弹”

一、病毒防御的天然克星病毒感染的核心难题在于其表面的 “糖衣炮弹”—— 以 HIV 为例&#xff0c;其 Env 蛋白表面密集的糖链形成物理屏障&#xff0c;传统抗体难以穿透。而牛 CDR3 单抗的超长 CDR H3 结构&#xff08;50-60 个氨基酸&#xff09;如同 “纳米探针”&#xff…

鸿蒙应用开发和Vue网页开发中生命周期的区别

因为下节课就可以写讲解两者生命周期代码的实战了&#xff0c;写介绍一下理论方面的区别&#xff1a;鸿蒙应用开发&#xff08;ArkUI范式&#xff09;与Vue网页开发在生命周期管理上的核心区别&#xff0c;这直接反映了原生OS应用与Web应用在架构哲学和运行环境上的根本差异⚙️…

基于SpringBoot+Vue的轻手工创意分享平台(WebSocket即时通讯、协同过滤算法、Echarts图形化分析)

&#x1f388;系统亮点&#xff1a;WebSocket即时通讯、协同过滤算法、Echarts图形化分析&#xff1b;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17前端&#xff1…

Java应届生求职八股(5)---并发编程篇

线程基础线程与进程的区别进程是程序的一次执行过程。它资源分配的单位。线程是程序执行的单位。并行和并发的区别单核CPU下&#xff0c;线程串行。&#xff08;并发&#xff1a;多线程轮流使用一个或多个CPU&#xff09;多核CPU下&#xff0c;每个核都可调度线程。&#xff08…

WSL 配置文件 wsl.conf 设置

WSL .wslconfig 小技巧 要在 WSL&#xff08;Windows Subsystem for Linux&#xff09;中增加内存&#xff0c;你需要编辑 WSL 配置文件 wsl.conf 或者直接调整虚拟机的资源限制。 文章目录WSL .wslconfig 小技巧以下是步骤&#xff1a; 找到或创建 .wslconfig 文件&#xff1…

9.从零开始写LINUX内核——设置中断描述符表

Linux 0.12 内核中断描述符表&#xff08;IDT&#xff09;完整实现代码以下是基于 setup 程序扩展的完整代码&#xff0c;包含中断描述符表&#xff08;IDT&#xff09;的定义、初始化及中断处理程序&#xff0c;可直接用于实验验证&#xff1a;asm/* setup.s —— 4 扇区&…