我这条老程序狗也曾有年轻的时候,当年毛色鲜亮,油光水滑,60级经验已满,正准备升级转职。跟职业训练师聊过后接受任务:学习名字很屌的专家级技能书《Head First Design Patterns》(中文版就是名字很不屌的《设计模式深入浅出》)。上当当网支付80金币,数天后NPC快递员送来任务物品,于是沐浴焚香,恭恭敬敬的翻开第一页,只见扉页上写着“欲练神功,必先自宫”。

等等!别再胡扯下去了,这本如今被奉为设计模式圣经的书,除了封面那个长得好像东方不败的洋妞,跟《葵花宝典》没有半毛钱关系。然而在苦读数小时后,老狗产生了跟任我行当年初读《葵花宝典》一样的想法:“这书是要人断子绝孙的!”

在当年的我看来,设计模式这事根本就是少数精英策划的,企图灭绝程序狗种族的大阴谋!精英们就是嫌程序狗们还不够苦逼,变着法儿的再给大伙儿增加工作量,企图累死单纯的程序狗们!不信请看接口(interface)这个阴险的设计,它除了让你多写几行代码,还能干嘛用?整个设计模式就是把两行程序能搞定的事,变成二三个接口加三五个类才下的来地。以至于诚惶诚恐的小程序狗们都不敢直接new个对象,不整个抽象工厂加单例模式都不好意思Hello World了!

于是我对着山谷(不是令狐冲当年面壁那个)怒吼:“为了啥!你们这是为了啥!”

山谷里传来圣贤们的回答:“为了解耦 耦 耦 耦……重要的事情说三遍”

如今漫长的十年已过去,我的狗毛已经斑秃,尖牙已经磨平,变成一条得道高狗的模样。十年来,这个喧嚣的世界不停向我脑海里灌注各种声音,一会儿敏捷开发,一会儿轻量级框架……在这些杂音背后,圣贤们像个被卡坏的留声机,不停在我脑海里播放这两个字“解耦解耦 解耦 耦 耦 耦……重要的事情说三遍”

于是,老狗我缕一缕颌下的白毛,跟你们这些小狗们说:“尔等欲识设计模式,请先识解耦”

君可知二十三种设计模式,大部分是为了实现解耦吗。解耦就像把纠结成一团的狗毛一根根缕顺、理清、分开,再织成一件件能单独穿上、合理搭配的狗毛背心、狗毛裤衩、狗毛西服、狗毛小蝴蝶结、狗毛小袜子……你们看,这是多么伟大的一件事啊!在程序狗界,这就像原始人类开始穿衣服一样具有划时代的意义!

请诸位回顾一下设计的六原则,仔细揣摩,从每一条原则里都能剥出解耦这两个字来。

开闭原则(Open Close Principle):对扩展开放,对修改关闭。当系统功能发生改变时,不去修改原有的功能类,而是创建一个新类去替换原有的类。如何做到这一点?利用接口规范类的行为,与具体的实现类解耦!

里氏代换原则(Liskov Substitution Principle):任何基类可以出现的地方,子类一定可以出现。这一条看起来是讲继承复用的,与解耦无关。实际上如果衍生类可以完全替换基类,也就实现了类的解耦,在任何地方都能使用不同的衍生类。

依赖倒转原则(Dependence Inversion Principle):对接口编程,依赖于抽象而不依赖于具体。这条不废话,就是抽象与实现解耦的意思!

接口隔离原则(Interface Segregation Principle):使用多个隔离的接口,比使用单个接口要好。降低接口的耦合!

迪米特法则(最少知道原则)(Demeter Principle):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。实体之间解耦!

合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是使用继承。继承本身就是一种强耦合关系,为了解耦尽量少用!

少年们,请听我一言!在学习设计模式时务必牢记以上六原则,如果对任一种模式产生了疑问,请仔细思考一下,如果采用其他方式,是否违反了其中一条或数条原则?

如此,也许可解答各位在初识设计模式时的困惑,请相信:先贤们真的,真的,真的不是要脱裤子放屁!


更多文章欢迎关注我的微信公众号:junior9919

扫码立即关注

文章看爽了就请打个赏吧

设计模式是不是一件脱裤子放屁的事相关推荐

  1. 脱裤子放屁,多此一举

    脱裤子放屁,多此一举. 转载于:https://www.cnblogs.com/zhangzujin/p/3892468.html

  2. 一个“脱裤子放屁“的功能!

    一个"脱裤子放屁"的功能! 哩语 "脱了裤子放屁",此话通常用来讥讽别人说话做事画蛇添足.多此一举. 1.背景 故事是这样的.公司的其他部门经常会要求我们部门以 ...

  3. 脱裤子放屁之用两个栈实现队列、用两个队列实现栈

    牛客网上有一道很nt的题目,用两个栈实现队列,你直接用队列不好吗?还耗内存,真的是脱裤子放屁,但是骂归骂,题目还是要做的. 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为in ...

  4. 一个夭折 脱裤子放屁的QSql Sqlite操作类

    本来想自己封装一下Sqlite操作类   写到一半才发现是脱裤子放屁       多此一举了 自己写的东西还没有Qt用起来简洁      唯一的好处估计就是能在整个工程里对同一个数据库进行操作     ...

  5. 新一配:程序员因一行代码被老板开除,网友评论:你这不是脱裤子放屁吗?

    在生活中,只要是你自己能够写代码的就是程序员,但是程序员只是一个统称,其中的差距也是巨大.除了理论知识的差异之外,其实我们可以看见最直观的差异就是编码能力的差距或者项目经验的差距,最主要你还是你的编程 ...

  6. 实践中的重构19_脱裤子放屁

    每当看到代码中有一个明显的冗余的时候,我就有一个感慨,这家伙时间真多啊,放个屁还要脱裤子. 看例子. if (addressCode != null && (StringUtil.eq ...

  7. 当着众多MM脱裤子放屁

    今天是我的生日,女友早早的打来电话说晚上要到家里去为我祝贺生日,还要带给我惊喜!听了这个好消息!我今天工作起来是格外买力,一下跑了十几个客户!回到公司.都下午三点了,到食堂一看,只剩下可怜巴巴的一菜一 ...

  8. 模板解析原理,脱裤子放屁

    <?php$datalist = array('11','11','11','11','11','11',);$hello = "模板测试";function compile ...

  9. 用三剑客取ip地址的方法(请忽略脱裤子放屁的~)

    在这里插入图片描述

最新文章

  1. free() invalid next size异常
  2. 计算机故障报告怎么写,计算机这样的诊断报告是否正常
  3. 中级职称计算机网络安全论文,中级职称答辩论文的计算机络综合布线系统设计.doc...
  4. 【python】队列——用顺序表实现队列操作
  5. 新买的笔记本电脑怎么分盘_笔记本电脑该如何保养,延长使用寿命
  6. ASP.NET Core 2.0和Angular 4:从头开始构建用于车辆管理的Web应用程序
  7. 盘点2012中国承载网十大事件(转)
  8. 【android studio】解决android studio drawable新建项目时只有一个drawable目录的问题
  9. html table 充满div,HTML,使用div+css实现自适应table布局
  10. 使用mysql 函数 IFNULL 解决某些字段为null
  11. HDU3364 Lanterns
  12. mybatis_plus条件构造器
  13. 排列组合公式,用向量叉乘的办法计算平行四边形面积
  14. 五分钟解读“大数据”
  15. myBattery电池应用正式登陆WP8
  16. 直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)
  17. 线性表的创建和基本操作
  18. ca76a_c++_流文件打开输入输出文件模式
  19. 『津津乐道播客』#134. 不是纹个皮皮虾你就能叫黑涩会了(嘉宾:索大)
  20. Java实现酒店管理系统(可运行可实现)

热门文章

  1. 2021SC@SDUSC-Zxing(一):Zxing初步认识
  2. Go语言求平方根与解高次方程以及公式推导
  3. 益聚星荣:今年双11,薇娅失去了“全网最低价”?
  4. Springcloug入门
  5. 三、Linux命令之cp
  6. 0行代码拿210万年薪,ChatGPT催生新型「程序员」岗:工作纯靠和AI聊天
  7. gedit的安装及插件使用
  8. onbeforeunload与onunload用法(转)
  9. windows,远程开机,远程唤醒(WOL,Wake-on-LAN),只在刚关机一段时间内可以实现,时间长了就无法实现
  10. Git基本操作和GtHub 特殊技巧