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

引言

各位旅行者们你们好,我是小森,首先我为啥是程序员。学了技术快六年了,但一直都是断断续续,本身自己的条件,从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. 文档工具:提高系统设计的可理解性和可维护性

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