设计模式之六大基本原则 渡一教育

  我们在学习、开发或面试时经常会听到设计模式,很多同学也多多少少能说出一点关于设计模式的东西来,但是很多同学却一直无法理解设计模式的精髓,那么今天开始渡一就来聊聊设计模式~

  我们依旧提出几个问题:

  01设计模式和设计原则是什么关系?

  答:所有的设计模式都是遵循设计原则的,不能违反设计原则。

  02设计原则的核心思想是什么?

  核心思想只有两条:减少复杂度(让一个复杂的逻辑变成多个简单的逻辑),降低耦合度(让模块之间的关联减少,使得模块之间更独立、更清晰)

  那么今天我们就来用邓哥的故事来和大家聊聊设计模式的六大基本原则。

1.单一职责原则

  周末恰逢邓哥休息在家,感受安静的清晨,正准备睡个回笼觉之际,邓嫂将邓哥踢下床对邓哥说:“把屋子扫了,衣服洗了,午饭做了,衣橱整理一下~”

  邓哥只能耷拉着双眼乖乖的去干活。但是邓哥要做的事情太多,所以手忙脚乱的。结果洗衣服没有甩干,洒了一地的水,手沾了水弄湿了衣橱里的衣服,做午饭忘了时间弄糊了。然后只能乖乖的去跪搓衣板。。。

  在这个故事里,邓哥就好比是程序中的一个模块。我们尽量不要在一个模块里写过多的业务逻辑,否则业务逻辑之间可能会相互干扰,引起更多的错误。

  在这个故事中,如果只让邓哥做一件事,估计还是可以做的好的,但是同时让邓哥做这么多的事,就会出现问题。所以单一职责原则的本质就是要将一个复杂的逻辑拆分成多个简单的逻辑,以此来降低复杂度。

2.里氏代换原则

  邓哥喜欢妹子,可以推出邓哥喜欢邓嫂(因为邓嫂是妹子)。但是邓哥喜欢邓嫂,无法推出邓哥喜欢所有的妹子(主要原因可能是不敢)。

  里氏代换原则的一个核心思想就是父类能做的事、能去的地方,子类必须也能做、也能去。

  从逻辑上举个例子,大前提:我喜欢动物。小前提:大熊猫是动物。结论:我喜欢大熊猫。

  在这个例子中,大熊猫是动物的一种,所以很明显动物是大熊猫的父类,所以对父类成立的逻辑对子类也必然成立。但是反过来,我喜欢大熊猫无法推论出我喜欢动物。所以如果一个方法或模块使用了一个子类,那么这个子类不能用其父类代替。

  里氏代换原则的核心:父亲能做的孩子都能做,孩子能做的父亲不能做,降低耦合度。

3.开闭原则

  闭原则:邓哥在外边经常受欺负,邓嫂很生气,觉得这样很不合理。于是规定:邓哥只能被邓嫂打,如果有人想要打邓哥,必须和邓嫂说,然后由邓嫂来打邓哥~

  开原则:邓嫂经常觉得邓哥太笨了,琴棋书画不会,洗衣做饭嫌累。所以邓嫂决定让孩子来学习琴棋书画。

  开闭原则的核心就是对修改关闭,对扩展开放。

  就像是在这个例子中,如果谁都能打邓哥就乱套了,所以规定只能由邓嫂来打邓哥,这样方便管理。这就是对修改关闭。

  当我们觉得邓哥的功能太少的时候(琴棋书画不会),我们也不能直接给邓哥增加功能,只能通过扩展的方式(让邓哥的孩子来学)。这样最后总体上邓家就有了会亲戚书画的人了。

  由于里氏代换原则的存在,在需要邓哥的时候,邓哥的孩子可以替代,所以就解决了邓哥不会琴棋书画的问题~开闭原则的核心:对修改关闭,对扩展开发,依次来减少耦合度。

4.依赖倒置原则

  邓哥每天在家都听邓嫂指挥,终于有一天邓哥硬气了一回~邓哥对邓嫂说:“你每天都命令我做这个做那个,传出去我多没面子~我不要面子的嘛~?”邓嫂想了想觉得邓哥说的确实有道理。于是对邓哥说:“以后每天我就不命令你了~你每天看小纸条吧~小纸条上写什么你就做什么,都是小纸条命令你的,和我就木有关系了~”

  邓哥一想有道理,于是就答应了。从此以后,每天邓嫂都不会对邓哥呼来唤去了~有什么事就往小纸条上写~

  邓哥和邓嫂就相当于程序中的两个函数或者两个模块。原本这两个模块是相互依赖的关系(A调用B)。但是这样会有一个问题,就是当一个模块发生修改的时候,总会对相关模块产生影响,为了降低这种影响,人们决定使用依赖倒置原则来降低核心模块间的耦合度。

  依赖倒置原则的核心:让原来相互依赖的两个核心模块,变为同时依赖于另一个非核心模块。以此来降低核心模块的耦合度。

5.接口分离原则

  有一天邓哥对邓嫂说:“我想下楼买菜,回家打游戏,晚上吃排骨&……#%&&#*巴拉巴拉一大堆”,邓嫂对邓哥说,一口气说这么多谁听得懂~一件一件说~

  很多的同学在工作初期,喜欢定义一个接口之后,通过传不同的参数做不同的事,最后只有一个接口,但是参数极其复杂。

  就像是这个例子中这样,邓哥虽然只说了一句话,但是内容极其复杂,这样明显增加了系统的复杂度。

  所以我们需要使用接口分离原则,其实接口分离原则和单一职责原则非常的像,就是每个接口负责的内容尽量单一,不要使用复杂的总接口,以此来降低系统的复杂度。

6.迪米特法则

  邓嫂为了不让邓哥学坏,平时经常告诫邓哥:“不要和陌生人说话~”

  “不要和陌生人说话”就是迪米特法则的精髓所在,迪米特法则指的就是:除了自身,当前对象的成员,参数,当前对象所创建的对象之外,尽量不要与其他外部实体或模块产生关联(引用或调用),以此来降低系统的耦合度。

  最后,六大基本原则才是程序设计的基本原则,我们学习的设计模式只不过是遵循基本原则的比较经典的具体实践。比如工厂模式,符合开闭原则、策略模式符合依赖倒置原则,观察者模式符合依赖倒置原则等等。所以我们在渡一教育学习的时候,一定要学习知识的本质,不要只学习表象,否则就会出现学了还不会用的情况~

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

推荐阅读更多精彩内容

  • 目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒...
    加油小杜阅读 719评论 0 1
  • 目录 单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒置原则迪米特法则组合/聚合复用原则(合成复用原则) 先来一...
    路飞_Luck阅读 1,377评论 0 4
  • June 11th 2018 Are you in? 你要参加吗? e.g. Are you in? 你要参加...
    南阳江上阅读 407评论 0 0
  • 上学的时候最喜欢写日记,刚开始是老师要求不得不写,后来变成了自己愿意写。从小我是个多愁善感的女孩,总觉得爸妈重男轻...
    季米花儿阅读 441评论 0 0
  • 生了锈的铁链 锁住我对梦的眷恋 剩了一截的钥匙 另一截还残留在锁里 变凉了的咖啡 增添了本身的苦味 可仍留有 原本...
    默者f阅读 178评论 0 0