设计模式入门

前言

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

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

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

软件设计原则

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

  1. 开闭原则

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

  2. 单一职责原则

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

  3. 依赖倒置原则

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

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

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

  4. 里氏替换原则

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

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

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

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

  5. 迪米特法则

    又称为最少知道原则。

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

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

  6. 接口隔离原则

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

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

设计模式

定义:

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

分类:

  • 创建型
    1. 工厂方法模式
    2. 抽象工厂模式
    3. 单例模式
    4. 建造者模式
    5. 原型模式
  • 结构型
    1. 适配器模式
    2. 装饰器模式
    3. 代理模式
    4. 外观模式
    5. 桥接模式
    6. 组合模式
    7. 享元模式
  • 行为型
    1. 策略模式
    2. 模板方法模式
    3. 观察者模式
    4. 迭代子模式
    5. 责任链模式
    6. 命令模式
    7. 备忘录模式
    8. 状态模式
    9. 访问者模式
    10. 中介者模式
    11. 解释器模式

设计模式和编程语言

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者已经搬迁去隔壁网站,也欢迎大家关注我们的写作团队:天星技术团队。 前言 不知道是否有许多萌新跟我一样,在看ja...
    点先生在这阅读 3,885评论 0 2
  • 看了些设计模式的文章,总结做些记录用于加深印象 原文地址:https://www.cnblogs.com/mali...
    发光吧阅读 3,764评论 0 50
  • 前言   俗话说,好记性也不如烂笔头,最近开始阅读设计模式这方面的书籍,算是借此开个好头,把一些理解的和不太理解的...
    happyJared阅读 4,253评论 0 18
  • 夜,在一个人的房间,清寂幽长。夜,在一个人的灯下,身影犹凉。 夜里的风,在窗外呼啸作响。夜里的汽车喇叭,在沉长的街...
    玉生烟阅读 884评论 0 5
  • 一 “为爱而教,学而自由”是黑龙江省富锦市双语学校的校训。 2016年9月,我到富锦双语学校参加他们的十年校庆活动...
    高手如林阅读 8,646评论 5 21