2019独角兽企业重金招聘Python工程师标准>>>

IT职场的小菜经常有这样的疑问:

为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。

为什么用户提出需求变更后,大牛只需潇洒地敲敲键盘,改改配置;而自己将代码改了又改,删了又建,几乎晕厥,最后只能推翻重来。

为什么大牛写完的程序测试上线后,几乎完美运行,用户无懈可击;而自己的程序bug重重,改好一个却又引出另一个,按下葫芦浮起瓢,几近崩溃。

为什么同样是程序员,大牛工资1W,而自己只能拿区区的3K?

大牛显然知道一些小菜所不知道的秘密,这秘密又是什么呢?

这个秘密就是设计模式。设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。只有精通了设计模式,才敢说真正理解了软件工程。可以说,设计模式是每一个架构师所必备的技能之一。作为一个面向对象设计程序员,只有精通了设计模式,才能完成自身价值从3K到1W的飞跃,才能摆脱码奴的命运,成为一个真正的软件工程师。

提到设计模式,不得不感谢GoF(Gang of Four,四人组),他们1995年出版的《设计模式》一书,第一次将设计模式提升到理论高度,并将之规范化。书中一共总结了23种基本的设计模式。而这23中设计模式几乎涵盖了面向对象设计过程中所有问题的解决方案。书中提到的23种设计模式分别是:

1.单例模式 2.工厂方法模式 3.抽象工厂模式 4.模版方法模式 5.建造者模式 6.代理模式 7.原型模式 8.中介者模式
9.命令模式 10.责任链模式 11.装饰模式 12.策略模式 13.适配器模式 14.迭代器模式 15.组合模式 16.观察者模式
17.门面模式 18.备忘录模式 19.访问者模式 20.状态模式 21.解释器模式 22.享元模式 23.桥梁模式

那么如此多的设计模式又是从何而来呢?《易经》有云:“易有太极,是生两仪,两仪生四象,四象生八卦”,意思就是说世界万物皆有起源。而设计模式的起源是面向对象程序设计思想,是面向对象设计的精髓——抽象。面向对象通过类和对象来实现抽象,实现时产生了面向对象的三个重要机制:封装、继承、多态。正是这三个机制衍生出了各种各样的设计模式。在面向对象软件设计的发展过程中,除了《设计模式》一书中提到的23中设计模式之外,新的设计模式仍然不断出现。

从面向过程到面向对象是软件设计诞生以来的迈出的最伟大的一步,面向对象程序设计成功解决了面向过程软件编程的低效率问题,并且彻底改变了人们的编程思维,为软件设计揭开了新的篇章。然而,要实现面向对象设计,彻底摆脱面向过程设计思维,并不仅仅是只要使用了一门面向对象的编程语言就能够达到的。使用面向对象设计,可以设计出优秀的软件,同样也可以设计出糟糕的软件。只有遵循一些特定的原则,才能设计出复用性高灵活性好的软件来。

在运用面向对象的思想进行软件设计时,需要遵循的原则一共有6个,他们是:

1.  单一职责原则(Single Responsibility Principle)
2.  里氏替换原则(Liskov Substitution Principle)
3.  依赖倒置原则(Dependence Inversion Principle)
4.  接口隔离原则(Interface Segregation Principle)
5.  迪米特法则(Law Of Demeter)
6.  开闭原则(Open Close Principle)

在软件设计的过程中,只要我们尽量遵循以上六条设计原则,设计出来的软件一定会是一个优秀的软件,它必定足够健壮、足够稳定,并以极大的灵活性来迎接随时而来的需求变更等因素。当完全明白这六个原则的含义时,小菜便完成了走向大牛的蜕变。

转载于:https://my.oschina.net/MrMichael/blog/398668

迈向大牛的重要一步——掌握设计模式相关推荐

  1. 迈出从3K到1W的重要一步——掌握设计模式

    IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝:而自己加班加点搞到天亮还做不完. 为什么用户提出需求变更后,大牛只需潇洒地敲敲键盘,改改配置:而自 ...

  2. DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?

    作者 | Ben Dickson 来源 | 数据实战派 这篇文章是我们对 AI 研究论文评论的一部分,这是一系列探索人工智能最新发现的文章. 对于已经精通围棋.星际争霸 2 和其他游戏的深度强化学习模 ...

  3. DeepMind 的新强化学习系统,是迈向通用人工智能的一步吗?

    作者:Ben Dickson 来源:数据实战派 前言 尽管已经掌握围棋.星际争霸 2 和其他游戏,深度强化学习模型的主要挑战之一是,它们无法将其能力泛化到训练领域之外.这种限制使得将这些系统在现实世界 ...

  4. 熊猫数据集_熊猫迈向数据科学的第一步

    熊猫数据集 I started learning Data Science like everyone else by creating my first model using some machi ...

  5. 穷人迈向富翁的理财十步曲

    当你每日的储蓄随着时间的累积,达到一定数量后再转存到存款薄里,如此日积月累,就可以逐渐养成自身存钱理财的习惯.不管你做什么事情,是否养成了良好的习惯,都会决定你的成败.理财投资也是同样道理,在你养成了 ...

  6. DeepMind的新强化学习系统,是迈向通用人工智能的一步吗?

    尽管已经掌握围棋.星际争霸 2 和其他游戏,深度强化学习模型的主要挑战之一是,它们无法将其能力泛化到训练领域之外.这种限制使得将这些系统在现实世界中的应用变得非常困难,因为现实世界中的情况比训练模型的 ...

  7. 联邦自动驾驶汽车调查是迈向联邦监管的第一步吗?

    尽管对自动驾驶汽车监管的压力越来越大,但行业观察人士并不认为 NHTSA 对特斯拉 Autopilot 和类似技术的新调查是即将发生变化的迹象. 迄今为止,自动驾驶汽车 (AV) 公司已经能够在几乎没 ...

  8. 一步一步掌握设计模式一(最简单的开始--单例模式^_^)

    首先我得说我是个超级超级的菜鸟,逼自己写这个系列是为了让自己动手,是为了更好的掌握,所以,不要笑我的水平哦,呵呵! 老规矩,一个时钟类!  1 using System;  2 using Syste ...

  9. 迈向数据科学的第一步:在Python中支持向量回归

    什么是支持向量回归? (What is Support Vector Regression?) Support vector regression is a special kind of regre ...

最新文章

  1. M_Map画南海水深地形图
  2. 【阿里云新品发布·周刊】第12期
  3. ActiveReports 6.0 - 高效开发UI
  4. 在statspack显示完整的SQL
  5. jQuery:无限循环两个或者多个事件 click / toggle between two functions
  6. 【Elasticsearch】解除索引只读限制 read-only
  7. 十年测试之路的笔记分享
  8. 从“在winform里打开网页功能”引发的问题探究
  9. nodeJS 视频教程
  10. oracle入门教程+视频教程
  11. AES256加解密java语言实现
  12. LUK-Triumphal arch
  13. PostgreSQL安装 弹出Error running
  14. H3C 重置cons 密码,清空配置
  15. 豚鼠学习HTML前端第一周
  16. 如何将诸如Acrobat Reader DC等默认安装在C盘的软件,安装在非系统盘?
  17. x265 命令行参数大全
  18. 视频号的发布技巧,视频号打造受欢迎的内容:国仁楠哥
  19. 大学 校园网登陆界面跳转不出来,没有跳转怎么办 原理解析以及解决方案
  20. 世界各国国旗及国家名称

热门文章

  1. 图像信号处理器及其架构演进
  2. 谷歌play商店_Google Play商店优化的17个技巧
  3. linux cpuid指令,通过CPUID指令获取CPU信息
  4. 【量化LDPC】基于量化技术的LDPC译码算法的研究与matlab仿真
  5. Pr2022 视频剪辑软件MAC版正式更新,全新版本支持M1,今天详细介绍pr2022如何安装使用?
  6. python多分支结构案例_python的程序控制结构-分支结构与身体质量指数案例--python-6-da...
  7. 提高生产力和效率的小方法
  8. hadoop 常用环境变量及使用
  9. XStream 简介
  10. Apple Developer文档笔记(一)AppKit App Structure