`
pjwqq
  • 浏览: 79718 次
社区版块
存档分类
最新评论

读Java与设计模式的感想

阅读更多

  昨天按照需求把很久以前写的某段delphi代码修改了一下,单个Unit终于突破了5000行天真,其实花的时间主要是修改之前的"复习"。

  出于对今后再次修改的恐惧,也是为了理清思路,把某些方法和变量封装成几个Class。感觉代码干净多了。

今天读了<Java与设计模式>前几章,感觉讲的非常好,之前也看过一些模式的书和博客,具体模式都讲的很清楚,但是总感觉缺了点什么,少了提纲挈领的东西。

摘录一段(可能不是原话):

 

开闭原则 Open-Closed Principle  简称 OCP:一个类应该对扩展开放,对修改关闭。
开闭原则从另一个角度上讲,其实就是"对可变性的封装原则" Principle of Encapsulation of Variation
意味着两点:
  1.一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。继承应当被看作是封装变化的方法,而不应当被看作是从一般对象生成特殊对象的方法。
  2.一种可变性不应当与另一种可变性混在一起。
以下的原则其实都是为了实现开闭原则,都附属于开闭原则,是它的工具与手段。
里氏替换原则 Liskov Substitution Principle 简称 LSP :任何父类出现的地方都可以被子类代替。
依赖倒置原则 Dependence Inversion Principle 简称 DIP:要依赖于抽象不要依赖于实现。
解释下为什么叫倒置:底层的接口是由高层提出的,然后由底层实现的,就是说底层的接口所有权在高层,所以叫倒置。
接口隔离原则 Interface Segregation Principle 简称 ISP :为客户端提供尽可能小的接口,而不是一个大的总接口,因为里面的东西客户端可能用不到而被迫实现它。
组合/聚合复用原则 Composition/Aggregation Principle 简称 CARP:尽可能使用组合,聚合达到复用目的而不是使用继承。分清 “has_a” 和 "is_a" 的关系。
迪米特原则 :Law of Demeter 简称LoD,讲的是一个软件实体应当与尽可能少的其他软件实体发生相互作用。
 
我的理解是,使用设计模式最终目的是为了实现开闭原则,对可变性进行封装。整一堆AbstrctClass和Interface在具体类上面是为了什么?实现复用为了什么?模块的可插拔是为了什么?模块之间解耦为了什么?衍生出的那么多具体设计模式是干什么的?说到底就是为了Open-Closed,节约你的"复习"时间吐舌头
2
3
分享到:
评论

相关推荐

    JAVA经典设计模式大全

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 ...

    设计模式文档

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    毕业设计-基于JAVA的springboot生鲜交易系统(源代码+论文)

    然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项目软件架构选择B/S模式和java技术,总体功能模块运用自顶向下的分层思想。再然后就是实现系统并进行代码...

    毕业设计-基于JAVA的Springboot的漫画网站(源代码+论文)

    本项目软件架构选择B/S模式和java技术,总体功能模块运用自顶向下的分层思想。再然后就是实现系统并进行代码编写实现功能。通过漫画网站将会使漫画信息管理各个方面的工作效率带来实质性的提升。 本项目在开发和设计...

    Java游戏设计打飞机小游戏有源代码和论文.zip

    6.2 感想 这款游戏作为我的毕业设计,是本人目前做过的最有意义的程序,这期间对J2ME的学习,使我又回到了初学PASCAL的时候。 本科期间做过很多课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我仍觉得...

    毕业设计-springcloud基于web的智慧养老平台(源代码+论文)

    本项目在开发和设计过程中涉及到原理和技术有: B/S架构、java技术、和 MySQL数据库等等;将按以下章节进行开发设计; 第一章绪论;剖析项目背景与意义,说明研究的内容等。 第二章开发技术。系统主要使用了java技术,...

    阿里云javasdk源码-CampusDiary:校园日记

    通过设计使程序模块化,能够更简单的读懂code以及方便维护和测试。整体的App架构选用MVP来搭建,结合最近比较火热的RxAndroid实现观察者事务模式就能够做到模块内部的高聚合和模块之间的低耦合,模块内被的高聚合。 ...

    毕业设计:基于Springboot的漫画网站

    系统主要使用了java技术, b/s模式和myspl数据库,并对此做了介绍。 第三章系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。 第四章系统设计;对软件功能模块和数据库进行详细设计。 第五章...

    毕业设计-springboot基于vue的地方美食分享网站(源代码+论文)

    本项目软件架构选择B/S模式和java技术,总体功能模块运用自顶向下的分层思想。再然后就是实现系统并进行代码编写实现功能。 地方美食分享管理方面的任务繁琐,以至于美食机构每年都在地方美食分享管理这方面投入较多...

    springboot篮球论坛系统(源码+论文+ppt+部署文档+演示视频)

    系统主要使用了java技术, b/s模式和myspl数据库,并对此做了介绍。 第三章 系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。 第四章 系统设计;对软件功能模块和数据库进行详细设计。 第五章...

    SpringBoot项目校园志愿者管理系统.zip

    系统可能采用前后端分离的设计模式,前端使用现代JavaScript框架如AngularJS、React或Vue.js来构建一个动态和响应式的用户界面,后端由SpringBoot搭建,整合了Spring MVC、Spring Data等子项目来简化数据库操作和...

    数据库课程设计题目汇总.doc

    《数据库原理及技术》课程设计 一、课程设计的目的和要求 (1)培养学生理解与《数据库原理》课程相关的理论知识,学会分析实际问题的能力。 (2)培养学生运用《数据库原理》相关知识设计系统应用的思想和方法。 ...

    第一个C#程序Hello World

    比如,它的代理事件模式是一种非常搞的设计概念东西,本人觉得它:接口不象接口,抽象类不象抽象类的,搞了一种什么来自于Callback的概念--唉,无语。。。 总结:如果你能看代码逻辑,那么表示你的C#学得不错,只...

    infobright包

    下面写一些感想,如有谬误,还请指正。 简单的来讲,Infobright 主要有下面的一些优点: 1. TB 级的数据存储和高效查询。大数据量存储主要依赖自己提供的高速数据加载工具(百G/小时)和高数据压缩比(&gt;10:1),...

    从Android界面开发谈起

    全文可能会涉及到java、android开发、android源码研究、设计模式等各方面的初级知识,属于典型的杂侃天下,深入研究还需要各位和我一起给力、加油了!好了,废话少说,开动!第一个问题,android界面开发涉及到了...

Global site tag (gtag.js) - Google Analytics