`
Joard
  • 浏览: 28557 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

设计模式学习小结

阅读更多
这段时间重新翻看了一下阎宏的《Java与模式》,把里面我敢兴趣的地方摘抄与此。
首先
Gof 写道
本书中的设计模式对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。


一.面向对象软件设计的核心问题:可维护性(Maintainability)与可复用性(Reuseability)。

二.维护性较差的原因:
过于僵硬 Rigidity   <---> 可扩展性 Extensibility
过于脆弱 Fragility  <---> 灵活性   Flexibility
复用率低 Immobility
粘度过高 Viscosity  <---> 可插入性 Pluggability

三.面向对象设计的几个原则
开-闭原则         Open-Closed Principle              OCP
里氏代换原则      Liskov Substitution Principle      LSP
依赖倒转原则      Dependency Inversion Principle     DIP
接口隔离原则      Interface Segregation Principle    ISP
组合/聚合复用原则 Composition/Aggregation Principle  CARP
迪米特法则        Law of Demeter                     LoD
可扩展性:OCP, LSP, DIP,CARP
灵活性:OCP, ISP,LoD
以上两点的交集就是&ldquo;可维护性复用&rdquo;。

1.开闭原则 OCP
一个软件的实体应当对扩展开放,对修改关闭。
Software entities should be open for extension,but closed for modification.

对可变性的封装原则 Principle of Encapsulation of Variation   EVP
EVP实际上是设计模式的主题,换言之,所有的设计模式都是对不同的可变性的封装,从而使系统在不同的角度上达到OCP要求。

2.里氏代换原则 LSP
如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。
LSP要求凡是基类使用的地方,子类型一定适用。
LSP是一条非常严格的原则,要求基类变为子类的时候,其程序行为不发生改变。在oop时并没有严格按照LSP来做。

3.依赖倒转原则 DIP
表述1:抽象不应当依赖于细节,细节应当依赖于抽象。
       Abstractions should not depend upon details, details should depend upon abstractions.
表述2:要针对接口编程,不要针对实现编程。
       Program to an interface, not an implementation.

4.接口隔离原则 ISP
使用多个专门的接口比使用单一的总接口要好。
一个类对另一个类的依赖性应当是建立在最小接口上的(LoD)。

5.合成/聚合复用原则 CARP
= 合成复用原则 Composite Reuse Principle CRP
要尽量使用合成/聚合,尽量不要使用继承。
继承的优点:①新类易实现. ②易修改或扩展
      缺点:①继承复用破环包装,白箱复用.
            ②超类发生变化,子类不得不改变.
            ③继承的实现是静态的,不能在运行时改变.
优缺点的②是相互对应的。

6.迪米特法则 LoD
= 最少知识原则 Least Konwledge Principle
一个对象应当对其他对象有尽可能少的了解。
表述:
①只与你直接的朋友们通信 Only talk to your immediate friends
②不要跟陌生人说话 Don's talk to strangers
③每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
LoD的实质是控制对象之间的信息流量,流向及信息的影响。
①优先考虑将一个类设置成不变类.
②尽量降低类/成员的访问权限.

要想恰到好处地在一个系统里面使用设计模式,必须做到以下几点:
①完全了解面临的问题,这就是说要完全了解具体情况。如果不完全了解所面临的难题,怎么能谈得上解决问题呢?
②完全了解模式,这就是说要十分懂得理论。如果不完全懂得所使用的理论,怎么能够正确地应用这一理论呢?
③非常了解怎样使用设计模式解决实际的问题,这就是说要将模式理论与具体系统需求情况相结合。如果设计师不知道一个设计模式怎样对系统设计有帮组的话,最好不要使用这个模式。不要只是因为想在简历上写上设计模式方面的经验就盲目地使用模式。

来看看gof是怎么说的
Gof 写道
通常你通过引入额外的间接层获得灵活性和可变性的同时,你也使设计变得更复杂并/或牺牲了一定的性能。一个设计模式只有当它提供的灵活性是真正需要的时候,才有必要使用。


写在最后
原本想写个总结什么的,写写各种模式的设计,再举个简单例子什么的。最后大感不必(神啊!原谅我的懒惰吧!)在这次翻看设计模式时,最大的感受是&ldquo;万变不离其中&rdquo;。很多设计模式在设计时都遵循上面列举的几个原则,不同的模式对原则有不同的侧重,在学习时可以运用这些原则去分析这些既有的设计模式,判断它们的优缺点。进而提高自己的分析和设计能力,毕竟GOF的23种设计模式也有它的局限,总会有新的问题待自己去解决。再说设计模式本身也不是语言中立的,先不提OOP与FP,就连OOP之间,有些设计模式就不是互通的,当然这些都是题外话了。
最后总结一下自己学习设计模式的阶段过程:
GOF---> Java与模式 ---> 面向对象设计的基本原则 ---> 用原则自行分析既有设计模式 ---> 忘掉设计模式! ---> 开始动手干!
最后带!号的阶段还没有开始处于&ldquo;意淫&rdquo;阶段,不过当当&ldquo;自淫者&rdquo;也不妨,别怕失败,工资是靠失败积累起来地!
8
6
分享到:
评论

相关推荐

    设计模式学习总结.doc

    在《设计模式学习总结》中,作者通过自己的学习经历和实际应用,分享了对23种经典设计模式的理解和感悟。这篇文档主要讨论了设计模式的概念、作用、应用以及学习设计模式时应注意的误区。 设计模式起源于面向对象...

    设计模式学习总结.pdf

    在《设计模式学习总结》中,作者分享了在实际工作中应用设计模式的心得,强调理解设计模式的核心思想而非机械地套用模式。 文中提到的23种设计模式中,作者详细介绍了19种,包括但不限于单例模式、工厂模式、观察者...

    MVC设计模式学习总结.pdf

    MVC设计模式学习总结.pdf

    设计模式学习总结一.doc

    设计模式学习总结一.doc

    设计模式学习总结-java版.zip

    设计模式学习总结-java版

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    设计模式学习报告

    ### 设计模式学习报告 #### 一、设计模式概述 设计模式是一种被广泛接受和使用的编程解决方案,旨在解决软件设计中的常见问题。它不仅能够帮助开发者编写出更易于理解和维护的代码,还能够促进代码的复用性。设计...

    设计模式学习笔记及其模式特点总结

    这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...

    设计模式学习 ppt

    设计模式是软件工程中的一种最佳实践,用于解决在...总结来说,"设计模式学习ppt"是一个全面介绍设计模式的教育材料,它将帮助学生和开发者掌握设计模式的核心理念,提升软件设计能力,促进代码质量和项目效率的提升。

    Java设计模式学习.pdf

    文档中描述的是Java设计模式学习笔记,目前涉及了7种设计模式,但没有具体指明这7种模式是什么,计划后续增加更多的模式。虽然文件内容中存在OCR扫描的识别错误,但不影响我们从整体上把握设计模式的脉络和学习方法...

    C++设计模式各种模式总结

    C++设计模式各种模式总结

    设计模式学习.zip

    本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马程序员培训课程的配套代码,旨在帮助学习者通过实际的代码示例来理解和掌握设计模式。 在C++中,设计模式主要分为三大类:创建型...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    在IT行业中,面向对象设计模式是软件开发中的重要概念,尤其在C#这样的面向对象编程语言中更是不可或缺。...无论是初学者还是经验丰富的开发者,都应该不断学习和探索设计模式,以实现更高效、更优雅的代码设计。

    设计模式之美—学习笔记

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。这些模式在不同的场景下被反复验证并被广泛接受,为开发者提供了一种标准的、可复用的解决方案。在这个“设计模式之美”的学习笔记...

    《Java设计模式》课程设计报告.docx

    《Java设计模式》课程设计...参考文献提供了进一步学习设计模式的资料,而附录中的完整程序代码可供学习者参考和研究。通过这个课程设计,学习者不仅可以掌握Java编程,还能深入理解设计模式的应用,提升软件设计能力。

    Head First 设计模式 +Java设计模式(第2版)

    设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码更易于理解、维护和扩展。这两本书对于Java开发者来说尤其宝贵,因为它们不仅介绍了设计模式的概念,还提供...

    设计模式学习心得(研磨设计模式)

    这篇“设计模式学习心得(研磨设计模式)”博客及其相关的PDF文档,为我们提供了一个深入理解和应用设计模式的宝贵资源。以下将针对单例模式、工厂方法模式、策略模式、命令模式和桥接模式进行详细讲解。 1. **单例...

    设计模式总结与分析

    Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,现将所有文章的进行了整理,方便大家下载阅读...

Global site tag (gtag.js) - Google Analytics