我明白了,浅聊设计理念

简介: ## 为什么面向对象说到为什么要面向对象,自然先说说最入门的面向过程,将面向过程与面向对象进行一下对比。### 面向过程一个人生活,什么事儿都需要自己做,比如说洗衣服这件事儿。### 面向对象两个人生活,有的事情只需要找个人做就可以了,还是洗衣服这件事儿。

为什么面向对象

说到为什么要面向对象,自然先说说最入门的面向过程,将面向过程与面向对象进行一下对比。

面向过程

一个人生活,什么事儿都需要自己做,比如说洗衣服这件事儿。

面向对象

两个人生活,有的事情只需要找个人做就可以了,还是洗衣服这件事儿。

二者对比

从上面的例子中是不是能看出面向对象和面向对象的特征?

方式 注重点 解决问题的关注点 思维
面向过程 一系列详细步骤 都放到解决问题的每一个详细的步骤上面(方法) 思考每一个具体的详细步骤
面向对象 一系列对象 都放到解决问题需要的一系列对象身上(object) 思考每一个解决问题的对象

从上面的表格中去理解,是不是懂了面向过程和面向对象。

面向对象是依赖于面向过程的, 面向对象的抽象会将面向过程的详细步骤进行整合处理。
这种整合方式是根据不同的场景来对很多详细的步骤进行分门别类的进行整理、管理。

举一个栗子

下馆子吃饭

面向过程:

面向对象

小结

  • 抽象是对具体的封装,具体是对抽象的实现。
  • 面向过程是 在面向对象不存在的时候 才有的,面向对象是 在面向过程的基础上 才诞生的。
  • 无论面向对象怎么样,最后都需要通过面向过程来实现。
  • 通过面向对象 能够更好的利用 面向过程的逻辑。
  • 通过面向对象 能够使得面向过程的功能 发挥更大的作用。
例1:老板 与 员工(老板的命令 由 员工来实现)。
例2:领导者 与 属下(领导者的指挥 由 属下来完成)。
结果:没有员工和属下,就没有老板和领导者。

讲讲设计模式

面向对象的好处

封装
对代码进行整理,以各种各样的方式整理,如模块儿、组件、类、对象、数组、方法、变量等等。

继承
复用已有的代码,如复用已有模块儿、组件、类、 对象、方法、变量 等等。

多态
对功能接口进行替换,如 需要什么功能就换什么样的代码,改一处代码就改变了多处发生良好的变化。
并不是在原先的基础上去修改大部分的源代码,而是新建文件,往这个新文件中加代码,之后修改少部分源代码或者不修改源代码的方式去引用这个新文件中的代码。

设计模式有哪些?

创建型

5种:工厂方法、抽象工厂、建造者、原型、单例

我自己的理解:这类设计模式用于“花式的创建对象”,将对象创建的过程进行封装,将对象的创建和使用 解耦了。

较官方的理解:

结构型

7种:适配器、桥接、组合、装饰器、外观、享元、代理

我自己的理解:这类设计模式用于“变着花样地借用花式创建的对象”,组合出一些类和对象之间的经典结构,用于解决特定场景下的经典问题,将类、对象的结构和使用解耦。

较官方的理解:

行为型

11种:模板方法、命令、迭代器、观察者、中介者、状态、策略、解释器、职责链、备忘录、访问者。

我自己的理解:这类设计模式用于“实现日常开发中的特殊功能或特殊行为”,汇总了一些类、对象之间的经典交互方式,用于将特定场景下拥有相关行为的类、对象解耦。

较官方的理解:

设计模式中的常见关系

死记是没有用的噢,我们可以先弄清楚类图的六种关系:依赖关系、关联关系、聚合关系、组合关系、实现关系、泛化关系。
暂时弄不懂也没关系,先记住它。

六种关系中,从弱到强依次是:
依赖关系 < 关联关系 < 聚合关系 < 组合关系 < 实现关系 = 泛化关系

设计模式中关系大致分为这六种。
目录
相关文章
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
域名解析 缓存
nslookup 查询已经解析,但是域名解析无法访问
nslookup 已经解析,域名解析规则:域名和主机双向绑定才能才能访问
1451 0
|
8月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
255 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
存储 NoSQL 中间件
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
在当今的数字化时代,用户认证是任何在线服务安全性的基石。本文将简明扼要地介绍登录注册流程中的核心概念:HTTP无状态性、Session、Token与JWT,并详细阐述两种实用登录方式—— 手机号登录验证(借助容联云/云通讯服务) 与钉钉第三方登录。我们将探讨这些概念的基本原理,并深入解析两种登录方式的实现流程,旨在帮助开发者提升用户认证的安全性与便捷性。
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
|
消息中间件 Java Kafka
消息传递新纪元:探索RabbitMQ、RocketMQ和Kafka的魅力所在
【8月更文挑战第29天】这段内容介绍了在分布式系统中起到异步通信与解耦作用的消息队列,并详细探讨了三种流行的消息队列产品:RabbitMQ、RocketMQ 和 Kafka。其中,RabbitMQ 是一个基于 AMQP 协议的开源消息队列系统,支持多种消息模型;RocketMQ 则是由阿里巴巴开源的具备高性能、高可用性和高可靠性的分布式消息队列,支持事务消息等多种特性;而 Kafka 作为一个由 LinkedIn 开源的分布式流处理平台,以高吞吐量和良好的可扩展性著称。此外,还提供了使用这三种消息队列发送和接收消息的代码示例。总之,这三种消息队列各有优势,适用于不同的业务场景。
197 3
|
9月前
|
人工智能 搜索推荐 iOS开发
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
|
10月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
人工智能 自然语言处理 云计算
软件开发的最新趋势和未来展望
软件开发领域正处于快速发展的阶段,不断涌现出新的技术和方法。从人工智能、云计算到低代码开发,这些趋势都在推动着软件开发的革新和创新。未来,随着技术的不断进步,我们可以期待更多令人激动的变革和机遇。无论是开发者还是业务,都应该保持敏锐的洞察力,及时采纳新技术,以适应不断变化的软件开发领域。
720 1
软件开发的最新趋势和未来展望
|
人工智能 运维 Kubernetes
获5项大奖,发布《云计算开放应用架构标准》,阿里云持续领航云原生
阿里云致力于为企业打造数字创新的最短路径,从实战中来,为价值而生。
2777 75
获5项大奖,发布《云计算开放应用架构标准》,阿里云持续领航云原生