设计模式是在运用构造定律

大家看这些模式图片,是不是树?
http://www.dofactory.com/net/design-patterns
所有的都是树,下面都是构造定律。
那些设计模式就是在研究如何构建树和如何在树上运动的。事实上应该是创建型模式、行为型模式,没有结构型模式。因为它的结构只有一个:树。
如果看到了图,肯定是因为少识别出了某个节点或者错误的识别出来了某个节点。添加上少识别的节点纠正识别错误的节点后就一切都是树了。
比如这个抽象工厂模式是怎么运用构造定律的,它的树大概是这样:

其实树就是对一个集合中的所有元素进行有偏移地单元划分。树形跟集合的那种没有交叉关系的包含关系是同一件事情。
咱们用IDE写出来的代码在试图用命名空间、代码段、缩进等手段去表现那棵树,但是咱们写出来的代码都在一个平面上不太容易想象到那棵树的样子,要是能立体起来就好了。它们是体,命名空间那个体中包含了若干个类体,类体中又包含了若干个字段体,字段体中包含了若干个位。
那些代码是空间,那个栈是时间。
人们之所以找到了这种构建事物的模式是因为被构造定律驱动的。构造定律驱动着我们来到现在这个地方,因为这样节省人类的智慧、节省对代码的管理成本、节能。那些不节省的模式慢慢的被构造定律抛弃掉了。
[该贴被anycmd于2014-12-23 13:10修改过]

http://www.jdon.com/46939

原文地址:https://www.cnblogs.com/feng9exe/p/8232858.html

时间: 2024-10-18 18:21:54

设计模式是在运用构造定律的相关文章

软件的复杂性与构造定律

快看!看!深入研究自然,你就会明白一切. - 爱因斯坦 复杂性是被低估的.复杂越高,开发人员会感到不安.对其的理解认知负荷代价就越高,我们就更不快乐.真正的挑战是在构建我们的系统时要保持其有序以及工程师的生产方式.对于这一点,一个简单的物理规律可以帮助我们:构造定律 the Constructal Law. 当我们拥有臃肿大量的组件和类时,其中每一个又由大量的职责行为功能组成,我们不会在系统层面去思考,相反,我们只是将大量脂肪性质类进行组群,从外表看,你是无法找出这个系统做什么用的,这个系统代表

构造定律

构造定律作为第二个时间箭头,将和热力学第二定律一道将宇宙推向无序. 宇宙遵循的神秘定律! 编辑 在宇宙中,各个天体的尺寸可谓相差十万八千里,就算是在我们的太阳系之内,各大行星的大小的差异就足以让人惊叹.为什么各个行星.各个恒星乃至各个星系之间的尺寸会存在差异,而不是完美的均匀呢? 研究者们相信,充满不同尺寸的天体将比充满尺寸相近的天体更有利于宇宙缓解由引力造成的紧绷状态. 据杜克大学的热力学专家Adrian Bejan教授称,这种多样性(diversity)或多层次性(hierarchy)都是因

JavaScript高级程序设计学习(六)之设计模式

每种编程语言都有其自己的设计模式.不禁让人疑惑设计模式是用来做什么?有什么用? 简单的说,设计模式是为了让代码更简洁,更优雅,更完美. 同时设计模式也会让软件的性能更好,同时也会让程序员们更轻松.设计模式可谓是编程界的"葵花宝典"或"辟邪剑法".如果一旦练成,必可在编程界中来去自如,游刃有余. 下面进入正题 (1)工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后 面还将讨论其他设计模式及其在 JavaScript中的实

【软件构造】第六章第一节 可维护性的度量与构造原则

第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性--软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护:(2)可维护性如何度量:(3)实现高可维护性的设计原则--很抽象. Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合度 面向对象五大原则SOLID 单一职责原则SRP(Single Responsibility Principle) 开放封闭原则OCP(Open-Close Principle) 里式替换原则LSP

经验_思想_方法_总结

感谢: 感谢每一个打开这篇文章的人,听我在这里瞎扯!至于我为什么会有闲情写这篇文章呢?因为我每天想的是为什么要给我这样的需求,背后的人性是什么,我能再做些什么能让他更好.久而久之,我也稍微有了些自己的思维,善于去思考事物的本质,然后,我就有了点感悟,一些我觉得正能量的东西,一些我觉得值得传递的东西,如果我的磁场吸引了你的话,我很高兴,但请你以开放的心态来看待我所讲的东西,不要陷入我的思维里,你该有你的思维,读完我的文章后,你应该从中得到一些启迪,避免全盘接收,抛弃你传统的中国填鸭式的思维方式吧!

资源到底是什么?Menu到底是什么?Function到底是什么?

Menu是什么? Menu表示空间坐标,是个标识符和定位符融为一体的对象.如果我们的系统是棵树,Menu实际上就是用来指示树上的具体位置.用户通过Menu来告诉系统他/她想要到这棵树上的哪个节点中去.Menu用来指示静态的资源树上的节点,资源树上的节点是空间.是场所. 而Function是动态的,是动态的运动树(栈)上的节点. 将Menu重命名为SpaceId可能更合适?需要是标识符不能是定位符,SpaceId对象上具有个url(定位符).标识符和定位符的差别就是要翻译.我们无法保证系统树的结构

软件架构的灵活设计

软件架构的灵活设计 板桥里人 软件架构如同人的骨架,不但要在整体上有骨感,而且细部需要很多骨关节连接,骨关节可以把两根大骨衔接在一起,两根大骨由此形成了松耦合,这样整个骨架的活动就灵活自如了.软件架构也应该如此,组件之间实现松耦合,类似积木或乐高玩具一样,通过组件模块之间的松耦合构建成一个灵活自如的软件系统. 松耦合代表对象之间关系比较松散,甚至没有热河关系,松耦合可以带来软件架构的灵活性,意味着扩展性.可维护性得到提高,复杂性降低了. 目前,组件模块之间松耦合常见有两种方式:接口和消息,这两者

读书笔记第四周《松本行弘的程序世界》

读书笔记第四周 <松本行弘的程序世界> ?? 这本书讲述了Ruby之父松本行动弘站在一个程序语言的设计者角度,分析了当今各种流行的编程语言的特点,以及他是如何在Ruby语言中权衡取舍的,读这样一本书,回过头来看各种编程语言时候油然而生一种高屋建瓴的感觉. 主要看了面向对象与设计模式两章. 面向对象 ?? 书中为我们展示了随着计算机行性能的提升,以及人们都快速开发大型软件的渴望,使得编程语言从面向过程逐渐向面向对象演变.一直以来大家面向对象都有着自己的理解,作者也阐述了他对于面向对象的理解,并对

C/C++各个周期的学习

C/C++ 程序的生命周期 编写时: 要点:业务,数据结构,控制解耦:健壮:易修改:清晰简单无歧义:易重用:低耦合高内聚:易链接:速度快: 书籍:<c++程序设计语言><effective C++><more effective C++><C++标准库><C++沉思录><深入理解C++11> <大规模C++程序设计><google C++ style><华为编程规范><数据结构与算法分析>