今天与人再次聊到这个话题,有人在为"到底该用什么模式"而烦恼,我相信,每个都经历过这个阶段一定都会感觉很熟悉这个烦恼
我认为, 模式不是目的,只是工具,达到设计目标的工具,我们不会因为"为了使用锤子"而去"使用锤子",一定是因为其他目的"比如敲打钉子"而去"使用锤子".
我们应该也同样不要因为"想用那个模式"而去"使用模式",而一定是因为其他的目的而去"使用模式",比如为了达到"单一职责"使用"工厂类模式"以达到"将构造职责和对象本身的职责"分离,为了达到"对修改关闭"而使用"访问者模式"将"对象的行为"与"对象的表示"分离等等.
有人说在现代的语言里(如.Net,Java),有的模式已经没有用了,如观察者,简单工厂等,其实这仅仅只是因为这些语言里对这些模式有了更好的支持,但是熟悉这些模式本身还是很有意义的,正如候先生所说:“勿在浮沙筑高台”。
有人说“我个人认为,解决重复的问题不用设计模式,用面向对象的知识就能解决,用设计模式,我主要是解决变化的问题”,我认为:

OOD和模式是无法比较的,抽象层次不一样
OOD的抽象层次高: 比如 水果
模式的抽象层次低: 比如  香蕉
你不能说:  水果和香蕉那个好吃一些

有人说“感觉有些模式就是因为以前语言和编译器能力底下才产生的一些设计方案”,我认为正好相反,因为有的模式是如此精妙 ,所以现代很多语言将模式的很多机制集成进来。
也有人说“ioc一出来。很多模式就没得用了”,我认为 IOC和模式不是一个抽象层次上的,IOC是属于OOD原则里的,相当于倒置倚赖,模式是OOD的工具,语言是模式的工具,就想你不能说:有了水果,香蕉就没用了。

模式是工具,不是目的 
目的是那些基本原则:
比如高聚合,低耦合,OOD原则等
终极目的其实只有一个:不要重复(Not repeat),这是最终目的

再聊语言,模式,OOD的更多相关文章

  1. 再聊 Blazor,它是否值得你花时间学习

    之前写了一篇文章<快速了解 ASP.NET Core Blazor>,大家关心最多的问题是,我该不该花时间去学习 Blazor.今天聊聊这个话题,并表达一下我个人的看法. 在此之前,我还是 ...

  2. Elasticsearch从入门到放弃:再聊搜索

    在前文中我们曾经聊过搜索文档的方法,Elasticsearch 一般适用于读多写少的场景,因此我们需要更多的关注读操作. Elasticsearch 提供的 Search API 可以分为 URI S ...

  3. 再聊我们自研的那些Devops工具

    两年前我写了篇文章『我们自研的那些Devops工具』介绍了我们自研的一些DevOps工具系统,两年过去了这些工具究竟还有没有在发光发热,又有哪些新的变化呢,我将通过这篇文章来回顾一下这两年的发展与变化 ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...

  5. ES6中的迭代器、Generator函数以及Generator函数的异步操作

    最近在写RN相关的东西,其中涉及到了redux-saga ,saga的实现原理就是ES6中的Generator函数,而Generator函数又和迭代器有着密不可分的关系.所以本篇博客先学习总结了ite ...

  6. 30天自制操作系统(三)进入32位模式并导入C语言

    1 制作真正的IPL IPL(Initial Program Loader),启动程序装载器,但是之前并没有实质性的装载任何程序,这次作者要开始装载程序了. 虽然现在开发的操作系统啥功能也没有,作者说 ...

  7. C语言:虚拟地址 和编译模式

    所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ...

  8. 鸭子-策略模式(Strategy)

    前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间 ...

  9. 《JavaScript 模式》读书笔记(5)— 对象创建模式2

    这一篇,我们主要来学习一下私有属性和方法以及模块模式. 三.私有属性和方法 JavaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与Java或其他语言是不同的.JavaSc ...

随机推荐

  1. [freemarker篇]05.关于集合的遍历

    人啊,有的时候就是没有办法坚持一些事情,总是因为各种理由在推脱,逐渐就变成了拖延症!例如胖先生的减肥计划,其实本来就没有计划,属于散漫形式的!一直减肥,一直在肥!总是说没有时间,没有时间!其实有时候就 ...

  2. Spring @Async的异常处理

    楼主在前面的2篇文章中,分别介绍了Java子线程中通用的异常处理,以及Spring web应用中的异常处理.链接如下: Java子线程中的异常处理(通用) Spring web引用中的异常处理 今天, ...

  3. 洛谷 P2800 又上锁妖塔

    https://www.luogu.org/problem/show?pid=2800 题目背景 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩& ...

  4. HDU 4609 FFT模板

    http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给你n个数,问任意取三边能够,构成三角形的概率为多少. 思路:使用FFT对所有长度的个数进行卷积(\ ...

  5. Linux修改服务器ip

    Linux基础二(修改ip地址.修改网关.修改DNS服务器.重新启动网络配置)   网络的初始化 .ip地址的修改(临时生效) 使用ifconfig命令 ifconfig 网卡名 ip地址 netma ...

  6. centos7.2编译安装zabbix-3.0.4

    安装zabbix-3.0.4 #安装必备的包 yum -y install gcc* make php php-gd php-mysql php-bcmath php-mbstring php-xml ...

  7. ? 初识Webx 3

    初识webx 2: http://www.cnblogs.com/lddbupt/p/5552351.html Webx Turbine建立在Webx Framework的基础上,实现了页面渲染.布局 ...

  8. 【BZOJ】1710: [Usaco2007 Open]Cheappal 廉价回文

    [算法]区间DP [题解]回文问题的套路做法:区间DP. f[i][j]表示区间i~j回文的最小代价,则有f[i][j]=min{①②③}. ①f[i+1][j]+min(a[s[i]],b[s[i] ...

  9. JAVA list 列表 字典 dict

    import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; pu ...

  10. for in、each; for 、forEach、map

    1.jQuery.each(object, [callback]) 用于例遍任何对象.回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容.如果需要退出 each 循环可使回调 ...