浅析设计模式的威力

时间:2022-10-29 05:12:08

浅析设计模式的威力

【摘 要】随着社会的发展,信息的高速膨胀,软件的规模已经非常庞大。良好的架构能较好的应付软件使用过程中的修改和扩充功能,从而降低软件的使用成本。好的架构需要科学的指导思想,设计模式提供了软件设计的指导思想和实现思路,在软件开发中发挥着越来越重要的作用,现在软件的精髓就在架构!

【关键词】设计模式;重构;软件维护;软件工程

随着社会的发展,信息化告诉发展。最为信息化载体的软件其规模也是与日俱增。软件的发展和建筑的发展有着很强的可比性。在历史上可能没有建筑工程学,建筑工程学也是到建筑规模发展到一定的规模以后才出现的,强调框架的搭建与设计。同样的问题出现于软件,现在软件的规模也得到极大扩充所以出现了软件工程!甚至很多人戏称,搞软件的叫IT民工!

建造一个小茅屋可能就是建筑的雏形,那时可能凭个人或者少数几个人的力量便可以完成一个任务。但是一个皇朝的宫殿可能就非一己之力可以完成的了。那么在软件早期可能一个人在不长的时间里就可以完成一个简单的小软件。但是现在社会信息高度流通与集成,一个软件要考虑诸多方面的因素,便非一己之力可以完成。所以软件工程有了产生的必要。

在建筑学方面就出现了诸多的设计样式,方便后人使用和扩展。在软件工程中也有诸多的框架,帮助软件工程师迅速搭建一个软件的大体形态!到此为止软件和建筑具有很强的相似性。

但是软件毕竟是软件,在实际的开发和使用中有自己的特点和要求。比如建筑的修改可能局限于其外部形态,不能随意修改。但是软件从理论上讲却可以”恣意妄为”。当然我们应该尽量避免这种情况的发生!凡事皆有度,一个设计良好的软件可以很轻松的拓展他的功能需求。这些要求是经常出现的,因为在软件业就存在着需求分析才是软件的难点,售后维护是重点的特点。因为人们往往发现定制的软件不是非常符合自己的要求,因为难在需求分析时的交流,而软件开发方也发现客户往往很”难缠”,在维护时期经常要求对功能进行修改或者扩充。维护往往占用了软件使用周期的大部分时间。

尤其是软件规模过于庞大的时候频繁的更改往往让软件开发商疲于奔命,直至项目的崩溃!这个就像是客户和开发商之间的过招,客户发招开发商就要接招。开发商是逼迫接招,这是其工作性质使然,只得接受。所以开发商很想练就一身过人本领以至能从容应招。所以在软件的行业中也出现了一套独孤九剑----设计模式!

我们知道在独孤九剑中有总决式、破剑式、破刀式、破箭式、破索式、破枪式、破鞭式、破掌式、破气式其中每式又各有变化。而在设计模式中却有三种大的方向创建型模式、行为型模式、结构型模式。其中各式也各有组成。独孤九剑以制敌为目的,而设计模式以良好的架构为目的!

良好的架构要有以下特点:

第一便于功能的拓展!满足这个特点便可以轻松应付客户对功能进行拓展的要求!

第二便于部件的更改,因为随着客户业务的增长可能对以前的一些部件进行更换,最常见的便是数据库的更换。如在客户使用之处业务量较小使用了Access数据库,但是业务量增大后数据库出现了问题需要更改为Oracle数据库,所以设计软件应考虑好这些因素。

武术讲究内外兼修,武术的高低有其招数的精妙和内力的深厚决定。御敌于先机的招式和深厚的内力决定了武术的必胜把握。同样设计模式中有其良好的架构样式和科学的指导思想决定了软件的鲁棒性!

一 内功篇:

在创建模式、结构模式、行为模式的背后也有设计模式的内功心法,它们相当于武术中的至高内功易筋经(单一职责、开放封闭、合成聚合复用)和乾坤大挪移(依赖倒转、里氏转换)心法。

单一职责就是每个类的功能要单一。避免因为某个职责需要改变去修改类而导致其余职责也受到影响!此原则可以避免出现不必要的麻烦!

开放封闭原则就是对拓展开放对修改封闭,你可以增加类拓展原来的功能而尽量避免到原来的类中去修改。该原则对于不同人去修改一个软件有很好的支持。后者不必关心原来的类而只要拓展自己的类即可实现功能拓展的目的。

合成/聚合复用原则就是应尽量避免集成而用合成或者集成来完成对应的功能。这样的话避免父类中的修改影响到子类。

依赖倒转原则是指高层不依赖低层,二者都依赖抽象,抽象不依赖细节,细节依赖抽象。

依赖倒转原则功能很强大,如果没有依赖倒转原则,小李飞刀就只会使用飞刀没有了飞刀便只有挨打的份了。但是实际上李寻欢曾经用林诗音的银钗做飞刀杀死过敌人。那么李寻欢使用的就是依赖倒转原则。李寻欢的武功宗旨是制敌,这个方法是一个抽象的借口借口里要实现的抽象方法就是投掷武器,飞刀实现投掷就是飞刀,银钗当然也可以实现投掷的功能!如果没有这个特点那就是在有些单纯的可爱了!

里氏转换原则就是调用中父类的地方调用子类也是可以的。比如一个地方处理需要一个动物,那么你给他一个小狗也是符合要求的,因为小狗就是一个动物。它反映的是IS-A的关系!没有里氏转换原则也就不能产生依赖倒转了!

后两者因为经常出现对象的上转很有乾坤大挪移的风范!

除上面两大内功心法外还有两个小绝招,迪米特法则和接口隔离法则!

迪米特法则简单讲就是只与直接类相关。如果调用第三类那么通过直接类和第三类发生关系。这样以降低类之间的耦合度!

接口隔离法则是指用多个接口来代替使用一个多功能接口的原则。其有点有些接近于单一职责原则!

以上原则和法则便是在软件设计的时候要注意的一些思想。因为其无形无质只是作为指导思想而论,所以本文归纳其为内功篇!内功的增加只在平时的勤加修炼。

二 外功篇

由于模式的实际设计方式众多,所以在这里只以几个典型为例来反映设计模式的功能以及其优势!

创建型模式中的佼佼者工厂模式,其内功配合使用乾坤大挪移心法中的依赖倒转原则,定义一个用于创建对象的借口,让子类决定实例化那种类,使一个类的实例化延迟到它的子类中,从而达到方便拓展的功能,以满足开放封闭原则。

结构型模式中的盟主是外观模式,外观模式设计比较简单但是作用却比较重大,它为子系统中的一组接口提供了一个一致的界面,通过高层接口使得子系统更加容易使用。外观模式大有返璞归真的意思,任何精妙的招式都被封装于一个普通的招式,这也反映了设计模式以实用为准则的原则。

行为模型中最为沉着冷静的应是观察者模式了,它以一种对不动我不动对一动我先动的至高觉察力而闻名。它通过一种主动通知的方式更正了所有相关类的状态。

从上面可以看出,设计模式是指导软件设计的宝典,只要根据实际情况的要求选用适当的设计模式就一定可以从容应对现实中需求不稳定和功能拓展的要求。

总之,设计模式是前人智慧和经验的结晶。只要灵活运用必能在实际的工作中体会到它的优势!关于设计模式的架构方式我将在本文的姊妹篇—设计模式的构造中详细阐述!

参考文献:

[1] 福勒(Martin Fowler) 重构:改善既有代码的设计人民邮电出版社; 第1版 (2010年4月1日)

[2] 程杰 大话设计模式 清华大学出版社 2007年12月1日

[3] Zhou YueZhi,ZhangYaoXue,Wang Yong Source. Customizable boot protocol for network computing.Journal of Software, 2003,14(3):538-546

[4] RogerS.Pressman.软件工程——实践者的研究方法(第五版)[M].机械工业出版社,2009.

[5] 周立柱,冯建华,孟小峰等著.SQL Server数据库原理.北京:清华大学出版社,2004

[6]C++Primer中文版(第4版) 李普曼(Stanley B.Lippman)、等、李师贤、 蒋爱军 人民邮电出版社 (2008-07出版)

上一篇:让语文学习插上实践的翅膀展翅翱翔 下一篇:浅析高等学校实验教学管理