设计模式入门

2019-01-08  本文已影响6人  树荫下的天空

前言

随着近几年互联网兴起,无数人通过自学、培训加入到IT行业中来,因此科班出身的小伙伴也面临学更大的压力。是否四年的计算机专业还不如别人培训三个月来的实在?

其实现在java技术成熟,各种框架层出不穷,如果只是单纯的会用框架,用框架解决业务问题,确实谁都可以,而一名程序员的真正竞争力不应该在此。而是他的编程内功。

编程内功主要有两个算法跟设计模式。前者需要不断地练习强化自己逻辑,需要一定的时间沉淀。后者简单许多,是你代码可读性、可扩展性、可维护性的保证,用途更广,学起来也简单。

软件设计原则

软件设计原则,制定了一套高效优雅的软件开发规约,不一定都要遵守,也不可能全部遵守。可以根据业务场景进行具体取舍。

  1. 开闭原则

    对扩展开发,对修改关闭。这是最核心最重要的设计原则,是软件复用的基石。23种设计模式几乎都是以“开闭原则”为指导思想。

  2. 单一职责原则

    比较好理解,“单一职责原则”顾名思义,一个类只负责一项职责,不要把毫无关联的功能模块组合在同一个类里。具体可根据业务功能划分。

  3. 依赖倒置原则

    高层模块(稳定)不应该依赖低层模块(变化),二者都依赖抽象(稳定)。

    抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。

    有人问我,在一个service里要用到另一个表数据,是注入对应的dao呢,还是service呢?依赖倒置原则已经给出了答案,应该依赖于service。

  4. 里氏替换原则

    定义:子类可以替换父类的位置.并且程序的功能不受影响。

    本质是对开闭原则的补充,里氏替换原则 建议不覆盖父类的非抽象方法。

    ps: “面向对象编程”其实还是有缺陷的,里氏替换原则正是为了弥补它的这些缺陷而生。现在有不少人唱衰“面向对象”编程思想,他们试图通过代码举例通过 “继承”、“多态”会给程序带来难以预知的风险。其实他们给的代码示例绝大多数都是违反“里氏替换原则”导致的问题(面向对象的缺陷和具体示例后续章节介绍)。

    新生语言go也抛弃了“类”的概念,某些程度上也是怕引入class难免会违反“里氏替换原则”。

  5. 迪米特法则

    又称为最少知道原则。

    从被依赖者的角度来说:只暴露应该暴露的方法或者属性,即在编写相关的类的时候确定方法/属性的权限

    从依赖者的角度来说,只依赖应该依赖的对象。

  6. 接口隔离原则

    客户端不应该依赖它不需要的接口。

    一个类对另一个类的依赖应该建立在最小的接口上。

设计模式

定义:

软件设计原则像是一个设计规范,规范总是要实现的。而设计模式就是对“软件设计原则”的最佳实践,每个设计模式都是以某些设计原则为指导思想而诞生的。

分类:

设计模式和编程语言

每个语言对设计原则的原生支持程度不同,设计模式的实现难度也不同。有些后起之秀语言因为吸取了前人的智慧,在语法上摒弃了可能违背设计原则的操作。

比如go语言没有class、继承概念,相比传统面向对象语言就不容易违反里氏替换原则。

优秀的语言,语法上就为你避免了 很多不规范的操作。从这个角度来说语言是有优劣之分的。

曾在知乎看到一句话:“go是最并发的原因,Python是最优雅的语言,java是最有模式的语言,PHP是世界上最好的语言”,虽然这是一次高级黑四种语言。但侧面也揭示了编程语言和设计模式的相关性。

上一篇 下一篇

猜你喜欢

热点阅读