戏说模式

来源:互联网 发布:澳大利亚房价走势知乎 编辑:程序博客网 时间:2024/04/30 02:31

一、模式的理解

1 what

解决同类问题的固定思路,抽象到具有指导意义的理论层面以后形成的东西。

美国模式:印钞,打拉丹,印钞,打拉丹。

中国模式:最近也炒的比较热火,30年解决超过5亿人口的温饱问题,这确实是前无古人的成就。

重庆模式:......

其实,要说模式这个东西,还是中国人比较驾轻就熟一些。所谓太极生两仪,两仪生四象,四象生八卦。所谓君子和而不同,小人同而不和。所谓知不知尚矣,不知知,病也,君子不病,以其病病。这些个里面的模式,不知道有几多人能体会得到呢。

模式是一种思想,一切试图从类图或者代码层面去理解模式的尝试都是徒劳的,因为那是一种企图通过具象化抽象的方法去理解抽象的方法,不足取。

要真正理解一种模式,要抱着悟道的决心,头悬梁锥刺股三月不知肉味,突然有一天,对着西湖说:“啊,逝者如斯夫!”

2 why

那么为啥要用模式这个东西,一方面当然是通过借鉴前人的经验和智慧,缩短劳动时间,提高劳动生产率;另外就是在大型的系统中,你做事情就不能太没有章法,否则做成的就是一个垃圾系统,导致整个系统内部比较混乱,管理起来事倍功半,发展起来瓶颈太多,不可持续。比如现在的利比亚,俺就认为他不是一个好系统,因为欧盟、美国、俄罗斯、中国在其中的利益纠葛,以及其内部的部落纷争,都导致整体系统运行的很没有章法。

3 how

关于why和how,俺给大家讲个笑话吧:话说有一天小明和小华一起去河里打鱼,一天没有收获,临近天黑,小明忽然打到了一条美人鱼,小明打量了半天,还是决定把美人鱼给放了,小华惊讶的问道“why”,小明很无奈地答道“how”。

二、模式的原则

对于OOP(包括后续的AOPSOP)来说,唯一的原则就是高内聚,低耦合。面向对象的核心思想就是要把你的程序看做一个一个的对象,这些对象有着明确而合理的分工,从而产生高效的协作。其实如果你对你的对象有感情,就会发现他们都是很有生命力的东西,有着很强烈的生活和感情诉求,如果你不满足他,他就会给你看脸色。

其实,这是西方一个比较显著的特点—契约。所以我们看到,在西方的政府、机构、公司,对各岗位的分工都比较清晰,当要执行一项综合性的任务,就通过组合的方式实现。比如美国的国家安全委员会,大概就是从外交部、联邦调查局、联邦财政局以及军方抽调不同的角色组成。但是我们也知道,美国并不是一个守约定的国家。美国历届总统的选举承诺,几乎没有能够实现的;美国答应与中国建立G2,共管太平洋,也不了了之;美国人一向推崇的民主和自由,在全球各地作为颜色革命的幌子,滥杀无辜。所以我们能看到,模式其实是有一定的适用场景。就像中国特色的社会主义,到了朝鲜或古巴,可能就不一定那么靠谱了。

但是又会有人接着问,何谓高内聚、低耦合?这个也非常好理解,比如2012年4月18日,菲律宾海岸警卫队的埃德萨号执法船挂白旗前往黄岩岛接替与中国对峙的巴拉望号 ,这就是一个高内聚、低耦合的反例,因为你要挂白旗显示期望通过和平谈判解决问题的意愿,却不能通过降下国旗换上白旗的方式,而只能通过换一搜本身带白旗的船过来的方式,这样的一个系统,是典型的低内聚、高耦合。类似的一个例子是2004年俄罗斯赠送给印度的戈尔什科夫航母 ,本来只需要支付给俄罗斯不到10亿的翻新费用,但到目前为止,总花费已近29亿,并且仍没有完工迹象。如果排除俄罗斯人奸诈的考量,我们只能说,这也是一个比较垃圾的高耦合系统,重构的代价甚至超过了从头再来。

其实俺私下里认为,设计的精髓就是分类学,就是在一个当前已知的空间(场景)里,你对其中的事物做怎样的分类,才能保证当这个空间萎缩或膨胀的时候,这些个事物不至于灭绝,然后再经过漫长的进化重生,而是可以通过快速的裁剪、更新与组合来完成适应新空间的过程。所以分类学是一门非常高的学问,如果你能对事物准确的分类,就证明你掌握了事物的本质,人亦如此。不信请看:

混沌未分天地乱,茫茫渺渺无人见。

自从盘古破鸿蒙,开辟从兹清浊辨。

覆载群生仰至仁,发明万物皆成善。

欲知造化会元功,须看《西游释厄传》。

三、GoF23种设计模式

本章开始,我们进入正题,来逐一介绍一下GoF的23种设计模式。Gamma将这些模式分为三类:创建模式、结构模式和行为模式。至于为什么是这样的划分方法,大概是按照这些模式的主要适用场景划分的吧,who knows。

1、简单工厂、工厂方法与抽象工厂

老子说:图难于其易,为大于其细。天下难事必作于易,天下大事必作于细,是以圣人终不为大,故能成其大。 根据老子的指示,我们先从简单工厂说起,逐步升级到抽象工厂里面去。

工厂(Factory),这当然是从率先工业化的西方传过来的概念,中国只有东厂。话说朱棣刚当主席那阵子,因为政权根基未稳,又不是很信任国务院的老少爷们,干脆指定身边的几个宦官去做一些特务和情报工作。所以朱棣就做了下面的动作:

岗位 A = new 掌刑();

岗位 B = new 理刑();

岗位 C1 = new 番役();

岗位 C2 = new 番役();

然后说你们几个要如此这般这般这般这般,这几个人就屁颠屁颠跑去干活了。朱棣第二天早上登OA审查他们的日报,才发现大事不妙,不仅一堆的旧朝老员工在搞非暴力不合作,就连锦衣卫也不那么让人放心了。而这,也才是冰山一角而已。所以朱棣就在日报上回复道:

“看来你们这个项目组严重缺乏人手,我再给你们new一些吧。”

这时机灵的掌刑A回复道:

“老大,您真是明察秋毫啊,不过此等小事,也不能烦劳您总是亲力亲为,将来规模大了,弄的您龙体欠佳,小的们可担当不起呀,不若设一东厂,此等琐事皆置于厂中,您看如何?”

朱棣一看,心说这货真TM阴险又机灵,遂回复道:

“亲,就依你吧。”

后来我们都知道,这个阴险又机灵的货就是东厂的第一任厂督。至此,朱棣的简单工厂就建起来了。

天顺八年,朱见深登基,因为调查业务的不断扩大,以及厂务分工更加精细化,单凭东厂已难以维系,遂于成化十三年又设立了西厂,专门负责侦查民臣言行举止,所以我们看到,工厂方法就诞生了。

东西厂的业绩不断提升,主席陛下也爱死了这帮从小就练习葵花宝典的家伙,所以这帮某方面功能欠缺的家伙在自我权利上也得到了有效补偿,有道是上帝说的好:“开你一扇门,就关你一扇窗”。所以在执行特务和情报业务之余,他们也不忘捞点外快,比如敲诈勒索,比如指鹿为马,公款吃喝要回扣,没事还到泰国(至于为啥这些家伙钟情泰国,这个,你懂的,呵呵)旅旅游等等,这样一来,东西二厂就需要开发更多的产品线来满足这些不断膨胀的业务和欲望,所以抽象工厂也就应运而生了。其实我们都知道,一个人的欲望是没有底线的,何况他是个太监。所以说我断定抽象工厂并不是解决这帮家伙欲望问题的最佳模式,一定还有更好的模式等着他们去开发。

原创粉丝点击