`
Joard
  • 浏览: 28098 次
  • 性别: 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

    设计模式学习总结.doc

    MVC设计模式学习总结.pdf

    MVC设计模式学习总结.pdf

    设计模式学习总结.pdf

    设计模式学习总结.pdf

    设计模式学习总结一.doc

    设计模式学习总结一.doc

    设计模式学习笔记总结

    各个模式都有详细的例子C#学习笔记,打开就知道了

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

    代理模式学习笔记、单例模式学习笔记、命令模式、原型模式、模式特点总结。 为个人对设计模式的理解,如果有理解不一致的不要砸砖啊

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

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

    设计模式总结.pdf

    自己整理的关于设计模式的总结,有全部的设计模式介绍,以及常用的设计模式总结记忆,适合程序员面试前突击以及日常学习使用

    设计模式总结与分析

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

    java设计模式学习笔记

    总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!

    设计模式学习资料

    设计模式总结资料

    深入浅出设计模式 完整扫描版

    《深入浅出设计模式》总结了许多系统软件在设计开发过程中的难点,力图将设计模式的实际应用与实现原理有机结合起来,破解软件开发人员在学习设计模式过程不能透彻理解并灵活运用设计模式的难题。  所有章节都是先...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    设计模式学习资料汇总.zip

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

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

    用myeclipse开发的java设计模式课程设计,课题内容为西瓜工厂,包含四个设计模式,单例模式、代理模式、建造者模式和抽象工厂模式,有较好的图形界面,文档内附有完整代码,适用于新手学习。

    23中设计模式学习汇总

    4人帮设计模式阅读笔记,23种java设计模式汇总,提炼,总结。

    C++设计模式大总结

    包括C++的常用设计模式,大总结与常见使用测试,一个VS工程,方便学习、复习和修改增加

    Java 23种设计模式(总结).doc

    本文档主要是为了向读者介绍二十三种设计模式,包括模式的描述,适用性,模式的组成部分,并附带有简单的例 子和类目,目的是为了让读者了解二十三种设计模式,并能方便的查阅各种设计模式的用法及注意点;...

Global site tag (gtag.js) - Google Analytics