再聊语言,模式,OOD
今天与人再次聊到这个话题,有人在为"到底该用什么模式"而烦恼,我相信,每个都经历过这个阶段一定都会感觉很熟悉这个烦恼
我认为, 模式不是目的,只是工具,达到设计目标的工具,我们不会因为"为了使用锤子"而去"使用锤子",一定是因为其他目的"比如敲打钉子"而去"使用锤子".
我们应该也同样不要因为"想用那个模式"而去"使用模式",而一定是因为其他的目的而去"使用模式",比如为了达到"单一职责"使用"工厂类模式"以达到"将构造职责和对象本身的职责"分离,为了达到"对修改关闭"而使用"访问者模式"将"对象的行为"与"对象的表示"分离等等.
有人说在现代的语言里(如.Net,Java),有的模式已经没有用了,如观察者,简单工厂等,其实这仅仅只是因为这些语言里对这些模式有了更好的支持,但是熟悉这些模式本身还是很有意义的,正如候先生所说:“勿在浮沙筑高台”。
有人说“我个人认为,解决重复的问题不用设计模式,用面向对象的知识就能解决,用设计模式,我主要是解决变化的问题”,我认为:
OOD和模式是无法比较的,抽象层次不一样
OOD的抽象层次高: 比如 水果
模式的抽象层次低: 比如 香蕉
你不能说: 水果和香蕉那个好吃一些
有人说“感觉有些模式就是因为以前语言和编译器能力底下才产生的一些设计方案”,我认为正好相反,因为有的模式是如此精妙 ,所以现代很多语言将模式的很多机制集成进来。
也有人说“ioc一出来。很多模式就没得用了”,我认为 IOC和模式不是一个抽象层次上的,IOC是属于OOD原则里的,相当于倒置倚赖,模式是OOD的工具,语言是模式的工具,就想你不能说:有了水果,香蕉就没用了。
模式是工具,不是目的
目的是那些基本原则:
比如高聚合,低耦合,OOD原则等
终极目的其实只有一个:不要重复(Not repeat),这是最终目的
最新文章
- 机器学习实战笔记(Python实现)-03-朴素贝叶斯
- 第一次IT技术面试经历
- Deep Learning in NLP (一)词向量和语言模型
- ubuntu14.04LTS编译MUDOS v22.2b14
- WCF自定义地址路由映射(不用svc文件)
- python学习笔记(sqlalchemy安装失败)
- Spring aop 实现异常拦截
- 29、activity横竖屏切换细节问题
- PHP 各种函数
- 常用apt cli
- poj3708:函数式化简+高精度进制转换+同余方程组
- Spark SQL 初步
- 写博客 Why?
- [Swift]LeetCode253.会议室 II $ Meeting Rooms II
- linux随机字符串
- UIButton设置UIControlContentHorizontalAlignment调整文字对齐方式
- XML学习总结一
- 关于我空间那篇名为《JavaScript axError:Unexpected token ILLEGAL 很简单的代码……》的随笔
- [转帖]TCP和UDP的135、137、138、139、445端口的作用
- [转]C++ 取代switch的三种方法
热门文章
- 【通用邮件发送】C# QQ 网易邮箱
- vijos 1907 DP+滚动数组
- PHP扩展--Oracle客户端(oci8)安装
- truncate与delete以及drop
- 2018 Multi-University Training Contest 1-1002 -Balanced Sequence(括号匹配+贪心)
- 加overflow-hidden就可以解决高度塌陷问题,overflow-触发BFC
- VMware Workstation Pro 14 序列号
- 常见网络命令之traceroute命令一起其他常用命令
- linux之cron定时任务介绍
- 【Python学习】解决pandas中打印DataFrame行列显示不全的问题