设计模式与系统阶段

我们经常碰到一个问题:母亲和老婆掉到水里,你先救哪个?这个问题很难回答,我们从GOF设计模式与系统的角度来解剖这个问题。

GOF设计模式分三种类型:结构型、创建型和行为型,这三者类型其实对应着一个系统的三个阶段:设计阶段、创建阶段和运行阶段。

结构型模式指出如何设计出系统的结构,也就是一个系统的孕育,如同人的十月怀胎过程。

创建型模式指出系统起初如何被创建,也就是宇宙大爆炸前一刻,是系统从纸上落地,如同人的出生和养育,是从无到有的创建过程。

行为型模式是针对系统创建后进入自我运行阶段,这时再也无需创建者和设计者干预,如同人的成年结婚生子。也就是宇宙形成后的运行状态。

下面进入具体论证一下:
(1)结构型模式有Facade Proxy 桥模式 适配器Adapter和组合模式等等,这些模式共同点是针对代码结构如何设计,比如适配器模式是设计出一个适配类,能够将原来两个不匹配的类能够和谐统一,结构上可能有三个类,一般结构关系可以使用UML的类图表达;组合模式更是一种代码结构组合,将两个类组合在一起;这是一种组成结构的关系。

有结构就有关系,这也是关系数据库为什么能表达结构一样,设计表结构Schema实际是设计结构关系。

在建筑领域,土木结构的设计需要精确的设计阶段,建筑绘图就是一种结构或架构设计,它类似我们的结构型模式。

(2)创建型模式有工厂模式等,创建模式指出一个系统从设计图纸到落地运行如何创建的过程,正如一个建筑从图纸到落成需要经过施工创建过程一样。工厂模式指出专门有一个工厂类负责类的创建。

(3)行为型模式有Command 职责链 观察者等模式,这些模式都是针对系统进入自运行阶段时,系统内部如何运行的,比如Command模式是指从客户端发出请求打包成一个命令,由后端根据命令指派相应的模块响应处理。而职责链类似于过滤器,可以对请求命令进行一个个过滤拦截;观察者模式则是对运行时的状态改变的及时响应,发展为后来的Reactor模式或异步模式,因为异步编程是针对系统运行阶段的编程,编码时需要联想到系统运行的状态,这对于没有系统运行经验的程序员比较难,一般程序员比较适合顺序编程,顺序编程是一种结构编程,那么现在我们提供一些框架能让顺序编程的代码在运行时异步运行,这些都是在认识到系统不同阶段的边界后才有的发展。

因此,认识到一个系统有不同的逻辑边界对于我们认识世界更加重要,系统的结构设计、创建阶段和运行阶段是三个严格不同的逻辑世界,如同天上 人间和地狱三界不同一样。

有了系统边界认识,对于解答本文开始的问题就非常容易,母亲和老婆掉水救哪个?母亲是创建养育自己,而老婆是自己成年后进入自运行生活阶段的重点,母亲属于创建者,是创建阶段的重点,而老婆是运行阶段的重点,将这两个重点跨域边界比较显然是不符合逻辑的,提这个问题的人没有系统逻辑分界。

再比如:老板大还是公司规章制度大?老板确实是公司制度的制定者,实际属于创建阶段的老大,但是制度一旦颁布,进入运行阶段,老板自己也要服从制度管理,这时是制度大。

还有一个经济学问题,经济中重要两个角色,一个商品需要生产者和消费者,那么生产者重要还是消费者重要呢?过去计划经济时期,我们抓生产,结果经济还是没有抓上去,国营的一个个生产厂家都倒闭了,其实还是没有从系统阶段边界来认识这个问题,生产者属于经济系统创建阶段的老大,只有大量建立生产工厂,才能创建出各种商品;但是当经济进入自运行阶段后,供大于求,经济还是会崩溃,这时消费者就是老大了,只有消费才是驱动经济的关键,这也是凯恩斯等经济理论的核心基础,也就是为什么西方国家鼓励贷款提前消费的逻辑基础。

扯了这么多咸蛋,主要是想说明,其实设计模式不只是对于编程有作用,而且对于自己的三观也有帮助,因为开发者开发出一个软件系统,麻雀虽小,五脏俱全,其基本原理不亚于上帝创造世界。如果一个程序员只知道数据结构和算法,却对一个系统的设计 创建和运行等阶段没有基本逻辑认识,那么很显然会迷失在细节中失去方向。

从老子有无哲学观点看:数据结构算法和功能属于“有”,看得见摸得着;而系统阶段边界属于“无”,虽然无形无态,但是自然之道是无生有,我们不能因为首先学习了有形的知识,却忽视了无形的思想。

[该贴被banq于2014-10-21 09:43修改过]

同意。
人就是从四种脱氧核苷酸这四种结构开始构建的

“母亲和老婆掉进水里,先救哪个”
母亲问儿子 或老婆问丈夫,都是想知道他心里的地位高低。但目前和老婆的地位可以说,是两个不同的高地位。
按照banq的说法,就是各属于不同边界之中,在地位的高低之争上,没有可比性。
马克思教导我们,要用辨证唯物思想去看待问题,也就是将问题放到具体的环境和时间段内,去分析下定论。那这时候,我们需要问在什么时候,什么处境下,母亲和老婆同时掉进水里。那添加上条件,会出现N种版本的电视剧,你的答案就不会轻易决定了。
设计模式是对系统不同事情和处境下,解决问题思路的总结。那么,只有我们很好的理解当前系统和业务的要求,才能选择或者创造出较佳的思路或模式去解决。

让女朋友来回答这个问题。

其实上面的回答是,也许要换个角度换个人来回答这个问题,最好了。
比如:女朋友回答,当然先救妈了,不孝的人我也不喜欢,这样也许能让大家都高兴。


注:总感觉anycmd的头像太....这个了。

我昨天尝试换头像没有成功

到底哪个重要,是要说依据的,还有依据的标准是什么。之所以存在争论,是因为每个人的经历不一。

古语有云:不听老人言,吃亏在眼前。

请细想这句话对吗?这句话凭空能判断吗?若“老人言”一定是对的,当正反的两个“老人言”哪个是对的?论对错,论选择,是基于公理,或者说条件,当两个人论据已经冲突,那么讨论论题已经没意义了。

系统的设计,其中就包含有公理的设立(约定)过程。

母亲和老婆掉到水里,你先救哪个?公理是啥?当有人跟你答案不一样时,你是否有问过他的身世和经历呢?

当一个问题的公理、条件过于模糊、虚幻,这个问题已经没答案,只有回答而已。

所有初创性的系统都符合这个模式解构.

有道理!