对于开发工作者的世界,不管是开发讨论会上还是学习交流会上,更或者面试的时候,当提及设计模式,都会或多或少的让别人高看你一眼。为什么它会有这么强大的魅力呢!

有些人说,主要是因为设计模式太抽象,不好理解,不好运用。有的人觉着,设计模式很好,而且实际运用起来也能减少很多问题。也有人觉着,设计模式就是纯理论的,让人学习起来头疼。在各种言论中,我第一次接触设计模式这个名词是:我之前参加过一个架构师给我们上过一次设计模式的课程。其实我对设计模式认知的也不多,今天也就不具体去说哪种设计模式,我带着大家去理解一下设计模式到底是什么和它能解决哪些问题。

一. 什么是设计模式:

很多学习过的设计模式的人可能会说,设计模式就是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结。咋一看,哇,好高深,压根看不出来设计模式到底是什么。其实举一个例子,大家应该就可以明白了,就像人们去爬一座没有开发的山,一开始人们都是根据自己的意识去爬,毫无规划,但是有心的爬山人爬了很多遍,将每次的路线进行规整,最后被修路工人修出来给游客经常走的可以观光很多风景的山路,就是我们设计模式。很多游客走这条路既看到很多重要的风景,又方便行走,解决很多问题。后面爬山的人如果知道有这条路的会直接走这条路,但是对这个路根本不知道的,估计还是会根据自己的意识在山上乱走,当然也不可避免会有一些人想另辟蹊径的。

二. 设计模式到底能解决哪些问题呢?

其实使用设计模式就是为了提高代码的重用性,使代码维护起来更方便,让人们看代码的时候更轻松。

三. 设计模式的6大原则的

1.开闭原则,勃兰特.梅耶在《面向对象构造》一书中说过:Software entities should be open for extension,but closed for modification。意思是说软件应该对扩展开放,对修改关闭。其实就是说,软件在进行新增功能的时候,不能去修改原有的代码,而去新增代码,实现灵活去除和新增功能,不影响原有的功能。目的就是为了更好的扩展和升级维护。

2.依赖倒转原则

针对接口而不是针对实现编程。类似于计算机,无论是CPU,主板,内存,还是硬件都是针对接口设计的;如果针对实现来设计,内存就要对应到某个品牌的主板,但是如果计算机需要换内存的话,那主板就要换掉了,这样想来会不会很尴尬呢。

所以这个原则就是降低模块和模块间的耦合。

3.接口隔离原则

使用多个隔离的接口,比使用单个接口要好。例如,每个平台都有登陆和注册,这两个都是用户模块,写成两个接口比写成一个接口好很多。这个例子可能不是很凸显,但是可以让人们更快的了解这个意思。这个原则就是说要提高程序设计的灵活性。

4.迪米特法则

其也叫作最少知道原则,我觉着直接叫模块独立原则更好,更直观,但是我说了不算哦。其实意思就是说,系统中一个模块和其他模块尽量少的发生联系,实现系统模块的相对独立。网上有这个说法,一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。这个原则也就是说降低类之间的耦合,减少对其他类的依赖。

5.单一职责原则

意思就是说,一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起他变化的原因。目的就是要将类的复杂性降低,可读性提升,可维护性。

高内聚,低耦合

这个原则一看6个字,相当高深,其实他的意思是:模块内的功能要内聚的越高越好,模块与模块间的联系越少越好。解释了一下,貌似懂了点,耦合的强弱还是取决于模块间接口的复杂程度,进入或者访问一个模块的点以及通过接口的数据。

6.里氏代换原则

里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件的功能不受到影响时,基类才能真正的被复用,而衍生类也能在基类的基础上增加新的行为。我们举一个这样例子,给大家看看,比如鸡,是禽类,它的衍生类有鸭,鹅等等,如果衍生类换成了基类的原生方法,如把禽类换成了猫科,那么软件的功能就受到了影响,就不符合里氏代换原则。

这就是设计模式的6大原则,咋一看,太深了,看不懂,解释了一遍后,懂了这6个原则,可是仔细想想也就是纸上谈兵,真正的还是不知道这是怎么用的。设计模式就是一个纯理论的,是经过总结经验集成的一本书,具体的使用还得以后大家在写程序中细心点,仔细观察总结。

以上就是我一开始学习设计模式的感觉和开始学习的点,我觉着还是先了解它是干什么的有什么用才会有继续学习下去的理由,当然了,每个人有各自的学习方法,不能一概而论,也希望每个学习设计模式的人在学习过程中可以收获丰富。

浅谈自己学习设计模式的感受相关推荐

  1. 浅谈深度学习:基于对LSTM项目`LSTM Neural Network for Time Series Prediction`的理解与回顾

    浅谈深度学习:基于对LSTM项目LSTM Neural Network for Time Series Prediction的理解与回顾#### 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学 ...

  2. 浅谈如何学习深度学习(经验之谈,仅供参考)

    浅谈如何学习深度学习 方向 书籍 视频 方向 首先,要选择一个感兴趣的方向,或者说是将深度学习与自己的专业.学校的优势学科相结合. 计算机视觉(数字图像处理.图像分类.目标检测.图像语义分割.目标跟踪 ...

  3. 浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现)

    浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现) 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LS ...

  4. 浅谈深度学习:了解RNN和构建并预测

    浅谈深度学习:了解RNN和构建并预测 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LSTM项目LSTM Neural Network for ...

  5. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

    没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章: 开篇大吉 集成AI模块到系统中 模型的部署 CMSIS-NN介绍 从穿糖葫芦到织深度神经网络 又和大家见面了,上次本程序猿介绍了CMSIS- ...

  6. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  7. 浅谈深度学习的基础——神经网络算法(科普)

    浅谈深度学习的基础--神经网络算法(科普) 神经网络算法是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助 ...

  8. 浅谈深度学习:如何计算模型以及中间变量的显存占用大小

    原文链接:https://oldpan.me/archives/how-to-calculate-gpu-memory 前言 亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cu ...

  9. 转发:很好理解流形学习的文章-浅谈流形学习(Manifold Learning)

    转 很好理解流形学习的文章-浅谈流形学习(Manifold Learning) 来源 Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligen ...

最新文章

  1. python excle写数据
  2. centos平台cms系统
  3. cmake (3)多个源文件aux_source_directory
  4. 公安计算机专业就业前景,公安视听技术专业毕业后干什么
  5. Camera360与全球1.8亿用户共同创造更美的照片
  6. [sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/loading/loading] 将被索引
  7. WPF 入门笔记之基础
  8. java笔画数_Java调用setStroke()方法设置笔画属性的语法 原创
  9. C1能力认证训练题解析 _ 第一部分 _ 计算机通识
  10. 什么是DNS over HTTPS?
  11. 轻松使用中移物联网平台Onenet,MQTT协议快速接入实验,使用Onenet平台MQTT协议开发个人智能设备的解决方案
  12. win7怎么看计算机显卡内存大小,Win7系统怎么看显存?
  13. AI三大主义:符号主义、联结主义、行为主义
  14. C# 模拟PCM数据并创建WAV文件
  15. 小学五计算机课程安排,2021年小学五年级信息技术教学计划(干货4篇)
  16. 全球都在研发的虚拟气候设备,是治愈“失眠”的最优解吗?
  17. (PPT抠图)设置透明色/删除背景
  18. 奋斗吧,程序员——第三十七章.雄关漫道真如铁,而今迈步从头越
  19. 服务器占用内存高,单任务管理器查看每个程序占用都不高
  20. RGB-D Camera 汇总

热门文章

  1. 毕业后来到富士康(南京)软件公司
  2. 简约高端大气PPT模板
  3. 【题解】少女觉 (2019.08.12纪中【NOIP提高组】模拟 B 组T1)贪心
  4. 微软的 Windows 终究没落了!
  5. 完整三菱 FX5U定位模块5轴 2轴插补伺服
  6. 用模板创建Maven显示No archetype found in remote catalog. Defaulting to internal catalog
  7. 量化投资学习-35:执行力不够的根源
  8. 万字详解数据仓库、数据湖、数据中台和湖仓一体
  9. 想做一个完美的健身训练计划,你需要知道什么?
  10. 树莓派键盘定义 解决#号变成英镑符号的问题