设计模式学习总结

本文作者在学习设计模式的过程中,发现其在实际工作中带来了灵活性和效率提升,但强调设计模式并非一成不变,应注重理解其核心思想。文中介绍了Interpreter、Iterator、State、Flyweight、Command、Composite、Proxy、Visitor、Observer、Template Method、Factory Method、Strategy、Bridge、Facade、Decorator、Adapter、Singleton、Builder、Abstract Factory等多个设计模式,并探讨了它们在软件设计中的应用场景、优缺点和注意事项,提醒读者不要过度追求模式而忽视实际情况。
摘要由CSDN通过智能技术生成
引子

刚开始学习设计模式的时候,感到这些模式真的非常抽象。今年下半年以来,随着我们组工作重点的转移,以及我在小组中角色的变化,我开始有条件提出自己对新系统的设计想法。在设计过程中,我发现了很多设计模式的用处,也确实应用了很多设计模式,这让我越来越感到设计模式的重要性,因此我写了这十余篇专门介绍设计模式的文章,作为我的学习笔记。

《设计模式——可复用的面向对象软件的基础》(有趣的是,梅宏一再在组会上强调应该译成重用)中介绍了一共23种设计模式,我一共写了19个设计模式(其中三个和在一篇文章中),余下四个,考虑到该模式的应用范围我就没有介绍。在写这些文章时,其中的很多例子都是我在实践中提炼出来的,当然也有很大一部分是《设计模式》中的例子。不过,这四个人(四人团)生活的年代里现在已经很远了,所以它们的例子也很古老。

让我们更加设计模式

设计模式是个好东西,它给出了很多设计中的技巧与思路,对于很多优秀的设计,它加以总结与提炼。设计模式并非四人团拍脑瓜想出来的,而是他们搜集了其他人优秀的设计,加以整理出来的,他们不是这些模式的创造者,仅仅是整理者。

应用设计模式会给我们带来很多好处:软件将变得更加灵活,模块之间的耦合度将会降低,效率会提升,开销会减少。更重要的,设计模式就好像美声唱法中的花腔,让你的设计更加漂亮。总的来说,设计模式似乎将软件设计提升到艺术的层次。

设计模式已经被广泛的应用了,在现在很多的图形界面框架都使用了MVC模式,大量跌代器模式的应用,彻底改变了我们对集合的操作方式。不仅如此,应用了设计模式的设计,往往被看成为优秀的设计。这是因为,这些设计模式都是久经考验的。

模式不是模型

在学习和使用设计模式的时候,往往出现一个非常严重的误区,那就是设计模式必须严格地遵守,不能修改。但是设计模式不是设计模型,并非一成不变。正相反,设计模式中最核心的要素并非设计的结构,而是设计的思想。只有掌握住设计模式的核心思想,才能正确、灵活的应用设计模式,否则再怎么使用设计模式,也不过是生搬硬套。

当然,掌握设计模式的思想,关键是要仔细研究模式的意图和结构。一个模式的意图,就是使用这个设计模式的目的,体现了为什么要使用这个模式,也就是需求问题。这个模式的结构,就是如何去解决这个问题,是一种手段、一种经典的解决方法,这种解决方法只是一种建议。两个方面结合起来,明白为什么需要设计模式,同时明白了如何实现这个模式,就容易抓住模式的本质思想。

在抓住意图和结构的基础上,实践也是掌握设计模式的必要方法。当然,设计模式必须在某个场景下得到应用才有意义,这也是为什么《设计模式》中提供了大量的例子用来说明模式的应用场景,这实际上为读者提供了一种上下文环境。学外语不是要强调“语言环境”么,学习设计模式也是这样。

不要设计模式

看到网上很多人在讨论设计模式,他们确实很有***,满嘴都是模式的名字,恨不得写个Hello World都要应用到设计模式。设计模式确实是好东西,但是,中国有句古话叫作物极必反,即便是按照辩证法,事物总要一分为二的看。

我们说设计模式的目的是为了让软件更加灵活,重用度更高。但是,某种意义上,设计模式增加了软件维护的难度,特别是它增加了对象之间关联的复杂度。

我们总说,重用可以提高软件开发的效率。如果你是大牛,你自然希望你的设计可以被反复使用10000年,那就是:当世界毁灭的时候,你的设计依然存在。然而,现实是一个系统的设计往往在5年之内就会被抛弃,这是因为:1,软件技术产生了新的变化,使用新的技术进行的设计,无论如何都比你的设计好;2,硬件环境发生了很大变化,你的设计里对开销或者效率的追求已经没有意义了;3,新的大牛出现了,并且取代了你的位置。

应用设计模式会导致设计周期的加长(因为更复杂了),但是很多项目还在设计阶段就已经胎死腹中,再好的设计也没有发挥的余地。当我们向设计模式顶礼膜拜的时候,我们还必须清醒地看到软件生产中非技术层面上的东西往往具有决定性作用。

理想固然崇高,但现实总是残酷的。如何看清理想与现实的界限,恐怕是需要我们在实践中不断磨砺而体会出来的。在看完设计模式后,不妨反问以下自己,这些模式究竟能给你带来什么?

Interpreter、Iterator、State模式

    Interpreter模式:这个模式主要试图去解释一种语言。如果你学过形式语言,那么这个模式对你来说是多余的。

    Iterator模式:这个模式试图隐藏集合的内部表示,又同时可以使用户依次访问集合中的元素。现在STL和Java的跌代器就是应用这个模式的结果。

    State模式:这个模式的意图是允许对象在其状态改变时修改其行为,好像对象改变了。这个模式的应用场景是当对象的行为依赖于对象的状态时。为了实现这个模式,我们可以为每个状态下的行为实

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值