深入理解设计模式(终):总结--设计模式是药,没病就不要吃药

系列链接地址: 深入理解设计模式---系列目录

一、产品汪的神助攻,代码狗的安慰剂

定义:设计模式,指的是一个场景(context)下的一种解决方法(Solution),只要大家都认可某种模式,那么就只需要很短的一个名字,就可以代替很多很多的语言和文字交流,如果你觉得设计模式降低生产效率,那只能说你在这一行还要继续修炼。

宗旨:保证系统的低耦合高内聚,指导它们的原则无非就是封装变化,责任单一,面向接口编程等设计原则

目的:就是为了让代码变得更容易理解和维护

精髓:将复杂的逻辑抽离出来,让开发人员真正专注于业务代码,系统,那么设计模式会加大理解难度。但当你看懂之后,你会发现这么做真是太巧妙了!

设计模式无非就是把代码抽象出一个更高的层次,再来实现原先想要实现的功能,设计模式是有代价的,以复杂度换取灵活性,,说到底是为了给自己留条后路,在代码走向可能发生变化的点上留下灵活性的种子。

二、设计模式是黏合剂

我最初在学习设计模式的过程中由一种困惑,“这样继承封装多态乱七八糟的绕来绕去的干嘛?”后来慢慢的随着经验的积累才知道是迫不得已,这种迫不得已,有很多种原因。个人觉得最容易理解的就是“适配器模式”,因为出现了接口的冲突,所以我们不得不进行适配。但一个很自然的问题就是:为什么不直接改接口让他们自然融洽呢?这不是一种更自然更直观的解决方案吗?答案很有可能就是因为架构,大的架构已经确立,局部必须服从整体

那么,如果一个完全理想化的架构,是不是根本就不应该出现这种问题接口冲突的问题,因而根本就不需要这种设计模式?

不是的,设计模式是黏合剂,它的作用是弥补架构的局部缺陷,更好的支撑架构。更极端的一种说法可以送给痴迷于设计模式的同学:设计模式是药,没病就不要吃药

设计模式是为了封装变化,让各个模块可以独立变化。精准地使用设计模式的前提是你能够精准的预测需求变更的走向。我们都知道大部分人是做不到的,所以大部分人就算精通设计模式也多少会做错点什么东西。所以这其实不怪设计模式,怪产品狗</del>。所以说如何避免过度设计,这就要求你深入的理解你的程序所在的领域的知识,了解用户使用你的软件是为了解决什么问题,这样你预测用户的需求才会比以前更加准确,从而避免了你使用设计模式来封装一些根本不会发生的变化,也避免了你忽视了未来会发生的变化从而发现你使用的模式根本不能适应需求的新走向。

三、模式无处不在

要为实现需求而编码,而不是为使用设计模式而编码。象张无忌学太极一样,学会了,然后忘了,不要刻意使用设计模式,模式无处不在。

很多同学在学习设计模式的时候看到的只是结果,并不了解过程和动机,也就是其他人在什么样的情况下做出这样的设计,而这个恰恰是各种教程、资料上学习不到的。

在几年前我自己制定了类代码行数不超过600,函数行数不超过60,嵌套不超过3层的编码规则。这个规则非常明确,比“高内聚,低耦合”之类的可执行性高多了,我自己实践过程中,一旦违反这条规则的时候,就不断的重构至这个目标。

经过3,4年的实践,基本上做到了任何时候、场合都符合自己所制定的规则。现在阅读我写的代码的时候,往往能发现其中有些地方符合一些设计模式的地方。回过头思考设计模式的时候,悟出了开篇关于设计模式学习、应用的那个弊端。

四、脱离业务需求谈设计模式都是耍流氓

离开具体业务需求谈设计模式都是耍流氓,OOP的世界里出现设计模式是为了让程序更有弹性,易于扩展。而且经过这么多年的发展,前辈们从具体的业务需求抽象出很多种的设计模式,设计模式,是为了需求变动而产生,抛开需求谈模式,显得很苍白

没有完美的设计模式,它只适应于特别的场合,要理解和掌握设计模式,要从发现需求变动, 准确找到变化点,如何封装它的角度去研究,去学习,而不要拘泥于具体的形式。换句说话:在23种设计模式的需求中,要准确找出哪些地方是强耦合,并且由于实际需要,要对这些耦合进行解耦。这样才是真正的理解了设计模式。

原文地址:https://www.cnblogs.com/xuwendong/p/10284143.html

时间: 2024-11-08 22:52:46

深入理解设计模式(终):总结--设计模式是药,没病就不要吃药的相关文章

Java设计模式1:设计模式概论

设计模式是什么 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.毫无疑问,设计模式于己于人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样. 总体来说,设计模式分为3大类总共23种: 1.创建型模式,共5种 工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 2.结构型模式,共7种 适配器模式.装饰器模式.外观

猿取向的规划设计模式 ——GoF《设计模式》阅读摘要(零)

这个话题是很奇怪,设计模式是引导程序的设计不是模仿什么软件?呃.我的意思是,这是 面"对象"相对的设计模式. 我曾见过有人写<给妻子解释设计模式>,这样的把计算机中的思想与生活相结合固然非常好.人类解决这个问题的思想是相通的,计算机中的非常多思想比方分治.递归.贪心等都能在生活中找到相似的样例.可是.不恰当的样例反而会误导人的思维.造成理解偏差.设计模式本就是类与类之间怎样组织的一套软件设计经验,我们拿软件开发中的实例来解说,会更加准确. 写在前面: 为什么要学设计模式?

C#设计模式(0)-认识设计模式

简介 世界上本没有路,走的人多了也就成了路:世界上本来没有设计模式.用的人多了,也就成了设计模式.所以,我们不是严格按照它的定义去执行,可以根据自己的实际场景.需求去变通.领悟了其中的思想,实现属于自己的设计模式.通过对设计模式理解,让它它慢慢地影响你写代码的思维方式: 我们为什么要使用设计模式?使用设计模式是为了可重用代码,让代码容易被他人理解.保证代码可靠性以及可维护性. 最近看了一些关于设计模式的文章,以前也实际用过一些,这里希望将设计模式系列做一下总结,帮助我更深入地理解设计模式: 设计

【设计模式】盘点设计模式的几宗”最“

第一遍学完<大话设计模式>,顿感思考层次高了起来.让我们能站在山顶以更高的角度来俯视我们的设计.但是,我们也深知一遍的学习是远远不够的,今天先试着将自己目前的理解尽可能全面的总结一下,各位多多指教,不胜感激. 什么是设计模式 设计模式(Designpattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 原则-六宗最 最专情---- 单一职责:就一个类而言应该仅有一个引起它变化的原因. 口头禅:&

java设计模式系列之设计模式概要(1)

一.什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是

[设计模式] .NET设计模式笔记 - 了解设计模式

今天在TerryLee的cnblog(http://terrylee.cnblogs.com)里看到了与设计模式相关的整套文章,初学设计模式看完每篇文章后做些笔记和摘抄. ●什么是设计模式,什么是架构? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的

Java设计模式—单例设计模式(Singleton Pattern)全然解析

转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用的最多的设计模式,可能有非常多人会写几种设计模式.那么你是否知道什么是设计模式?为什么会有单例设计模式即它的作用是什么?单例模式有哪些写法?对于这种问题.可能有部分童鞋并不能非常好的回答,没关系今天就和大家一起来具体的学习下单例设计模式,相信通过学习本篇你将对单例设计模式有个具体的理解. 如有谬误欢

框架源码系列一:设计模式(设计思想、设计原则、各种设计模式介绍、设计模式总结)

要分析常用框架spring.mybatis.springboot.springcloud等的源码,首先要了解各种设计模式,因为框架里面应用了各种设计模式 一.设计思想 学习设计模式最重要的是掌握设计思想和设计原则,理解了设计思想和设计原则并运用到平时的编码中是最重要的!!! 1. 我们先来看下面的问题: 天天加班编程,编程到底都做的是什么? 撸代码,加班撸代码,写接口.写类.写方法 用设计模式或做设计的作用是什么? 指导.规定该如何撸代码,如何来写接口.写类.写方法 为什么要做设计.用设计模式?

设计模式----看大话设计模式笔记(二)

9.原型模式(Prototype): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建行的对象. UML图: 原型模式其实就是从一个对象创建另一个可定制的对象,并且不需要知道任何创建的细节. .NET 中实现ICloneable接口即可. 一般在初始化信息不发生变化的情况下,克隆是最好的办法,隐藏了对象创建的细节,又提高了性能. MemberwiseClone()方法,如果字段是值类型,对该字段进行逐位复制:如果是引用类型,复制引用但是不复制引用的对象,因此原始对象及产生的副本引用同一对象.