设计模式入门

前言

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

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