美文网首页
设计模式入门

设计模式入门

作者: 树荫下的天空 | 来源:发表于2019-01-08 23:29 被阅读6次

前言

随着近几年互联网兴起,无数人通过自学、培训加入到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是世界上最好的语言”,虽然这是一次高级黑四种语言。但侧面也揭示了编程语言和设计模式的相关性。

相关文章

  • 1.设计模式入门-策略模式

    《HEAD FIRST 设计模式》在第一章设计模式入门中介绍了策略模式(Strategy Pattern)。 定义...

  • 设计模式

    设计模式入门 计算机行业老话:设计即生活-- 由 ..... 谁设计,即是由 .....谁导演 使用设计模式最好的...

  • 【设计模式】设计模式入门

    设计原则: 多用组合,少用继承。使用组合建立系统具有很大弹性,不仅可将算法族封装成类,更可以“在运行时动态改变行为...

  • 单例模式(详解,面试问题)

    单例模式(从放弃到入门) @(设计模式) [TOC] 类图 简介 单例模式,可以说是设计模式中最简单的模式之一了,...

  • 快速理解设计模式之创建型模式

    要想更全面理解设计模式,建议先查看Spring的设计模式快速入门干货,前半部分是设计模式的分类和综述,与Sprin...

  • 设计模式入门

    作者已经搬迁去隔壁网站,也欢迎大家关注我们的写作团队:天星技术团队。 前言 不知道是否有许多萌新跟我一样,在看ja...

  • 设计模式入门

    鸭子超类,添加行为的错误,在超类上直接加fly的实现,木头鸭子也会飞 当设计维护时,为了复用目的而使用继承,结局并...

  • 设计模式入门

    设计模式入门   这是《Head First设计模式(中文版)》第一章的读书笔记。这本书是 2007 年出版的,书...

  • 设计模式入门

    前言 随着近几年互联网兴起,无数人通过自学、培训加入到IT行业中来,因此科班出身的小伙伴也面临学更大的压力。是否四...

  • 设计模式入门

    一、继承和接口的不足之处 并非所有子类都具有父类中的一切行为 Java接口不具有实现代码,继承接口无法达到代码的复...

网友评论

      本文标题:设计模式入门

      本文链接:https://www.haomeiwen.com/subject/iamirqtx.html