小菜编程成长记(九 会修电脑不会修收音机?——聊设计模式原则)
系列文章导航:
小菜编程成长记(九 会修电脑不会修收音机?——聊设计模式原则)
小菜编程成长记(十一 无熟人难办事?——聊设计模式迪米特法则)
小菜编程成长记(十三 设计模式不能戏说!设计模式怎就不能戏说?)
“这个我记得最牢了,就是活字印刷那个例子啊,是可维护、可扩展、可复用和灵活性好。我知道了,可以把PC电脑理解成是大的软件系统,任何部件如CPU、内存、硬盘,显卡等都可以理解为程序中封装的类或程序集,由于PC易插拨的方式,那么不管哪一个出问题,都可以在不影响别的部件的前题下进行修改或替换。”
“PC电脑里叫易插拨,面向对象里把这种关系叫什么?”
“应该是叫强内聚、松耦合吧。”
“对的,非常好,我们电脑里的CPU全世界也就是那么几家生产的,大家都在用,可是就是不知道Intel/AMD等是如何做出这个小东西。去年国内不是还出现了汉芯造假的新闻吗!这就说明CPU的强内聚的确是强。但它又独自成为了产品可以在千千万万的电脑主板上插上就可以使用,这是什么原因?”大鸟又问。
“因为CPU的对外都是针脚式或触点式等标准的接口。啊,我明白了,这就是接口的最大好处。CPU只需要把接口定义好,内部再复杂我也不让外界知道,而主板只需要预留与CPU针脚的插槽就可以了。”
“很好,你已经在无意的谈话间提到了设计模式其中的几大设计原则,单一职责原则,开放—封闭原则,依赖倒转原则(参考《敏捷软件开发——原则、模式与实践》)”大鸟接着讲道,“所谓单一职责原则,就是指就一个类而言,应该仅有一个引起它变化的原因,就刚才修电脑的事,显然内存坏了,不应该成为更换CPU的理由。开放—封闭原则是说对扩展开发,对修改关闭,通俗的讲,就是我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为。比如内存不够只要插槽多就可以加,比如硬盘不够了,可以用移动硬盘等,PC的接口是有限的,所以扩展有限,软件系统设计得好,却可以无限的扩展。依赖倒转原则,原话解释是抽象不应该依赖细节,细节应该依赖于抽象,这话绕口,说白了,就是要针对接口编程,不要对实现编程,无论主板、CPU、内存、硬盘都是在针对接口编程,如果针对实现编程,那就会出现换内存需要把主板也换了的尴尬。你想在小MM面前表现也就不那么容易了。所以说,PC电脑硬件的发展,和面向对象思想发展是完全类似的。这也说明世间万物都是遵循某种类似的规律,谁先把握了这些规律,谁就最早成为了强者。”
“还好,她没有问我如何修收音机,收音机里都是些电阻、三极管,电路板等等东东,我可不会修的。”小菜庆幸道。
“哈,小菜你这个比方打得好,”大鸟开心的说,“收音机就是典型的耦合过度,只要收音机出故障,不管是声音没有、不能调频、有杂音,反正都很难修理,不懂的人根本没法修,因为任何问题都可能涉及其它部件。非常复杂的PC电脑可以修,反而相对简单的收音机不能修,这其实就说明了很大的问题。当然,电脑的所谓修也就是更换配件,CPU或内存要是坏了,老百姓是没法修的。其实现在在软件世界里,收音机式强耦合开发还是太多了,比如前段时间某银行出问题,需要服务器停机大半天的排查修整,这要损失多少钱。如果完全面向对象的设计,或许问题的查找和修改就容易得多。”
“是的是的,我听说很多银行目前还是纯C语言的面向过程开发,非常不灵活,维护成本是很高昂的。”
“那也是没办法的,银行系统哪是说换就换的,所以现在是大力鼓励年轻人学设计模式,直接面向对象的设计和编程,从大的方向上讲,这是国家大力发展生产力的很大保障呀。”
“大鸟真是高瞻远瞩呀,我对你的敬仰犹如滔滔江水,连绵不绝!”小菜怪笑道,“我去趟WC”。
“浪奔,浪流,万里江海点点星光耀,人间事,多纷扰,化作滚滚东逝波涛,有泪,有笑…………”
“小菜,电话。小子,怎么又换成上海滩的歌了,这歌好听。”大鸟笑道,“刚才是死了都要爱,现在是为爱复仇而死。你怎么找的歌都跟爱过不去呀。快点,电话,又是刚才那个叫娇娇的小MM的。”
“来了来了,尿都只尿了一半!”小菜心急地接起电话,“喂!”
“小菜呀,我家收音机坏了,你能不能教我修修呢!”
(待续)