一年前写的对模式的体会

原创 2004年10月11日 17:16:00

当时去听了一个有关设计模式的讲座,一些心得体会在此与大家分享。

讲座首先从面向对象的基本原理开始,设计模式是提供若干种已有的面向对象开发的解决方案,
所以要真正理解并运用好设计模式必须首先理解面向对象的特性,也就是:
1.封装
  封装分为一级封装和二级封装,
  一级封装,类似C语言中的库函数将一些算法或常用的功能进行以便于重用;
  二级封装,利用面向对象的特性将功能封装成组件以便于重用。
  这里提倡的是二级封装,也就是运用设计模式所提供的解决方案进行封装以达到组件级重用。
2.继承
  继承是传统的面向对象中的重用手段,但继承的特点是具有层次关系并且是高耦合的,所以
  这些特点违背了高聚合低耦合的设计原则,难以重用。
  所以提倡利用类的组合而不是继承来完成功能,从所有的设计模式的类图中也都能看到类图中
  最多有两到三个层次,而且在高层的一般是接口。
3.多态
  多态也叫做动态绑定,也就是在编译时不知道具体的采用什么实例,而在运行时才知道。
  要完成多态必须利用接口或抽象类,这也就是面向对象编程的核心思想:面向接口编程。
  在此还提到了另外一点就是接口和抽象类的区别:
  从设计的角度来看,接口是面对客户(可能是最终客户也有可能是另外的子系统)的,
  也就是说接口是开发者与客户之间的一种契约,而抽象类是在系统内部实现时完成功能所
  进行的抽象,实现对外的接口并且可以给内部的实现类提供缺省的实现方法。
  从JAVA编程语言来看,一个实现类可以实现多个接口,而只能继承一个抽象类(受限于JAVA
  的单继承模型),另外抽象类可以提供部分实现方法,而接口则不能有任何方法的实现。
  对此应尽量从设计角度去理解而不要单纯的去看某一种编程语言(象C++就没有interface
  关键字,但这并不影响C++实现多态)。
4.抽象
  在面向对象的思想中所有的一切都可以是对象,所以适当的进行抽象也是面向对象的重要思想。
  有一些对象是对应到现实世界中某一具体事物,此时比较好理解,但有些时候是比较抽象的
  不好理解的,比如:系统当前的状态,系统的一个指令,其实这些也是对象。就像设计模式中
  提到的State、Command模式。

由于篇幅的关系我这里就不再讲具体的模式了,理解和运用设计模式需要注意以下几点:
1.真正理解面向对象特性;
2.熟记每个设计模式,达到别人一提某个模式的名字,就立刻在头脑中反应出该模式的类图;
3.尽可能多运用已掌握的设计模式,这样慢慢在实践中领悟每一种模式的精髓。
4.模式是提供现有的解决方案是在设计时使用的,也就是说不要从代码实现上去看模式。
  也就是说要从上到下(从设计到编码)去做。
  另外,在极限编程(XP)中也有一种提法叫做重构(Refactor),重构恰恰是相反的,
  是从下到上的去整理的你的代码。有兴趣可以参考6

下面列出一些学习模式的参考书籍:
1.《设计模式:可复用面向对象软件的基础》
  《Design Patterns:Elements of Reusable Object-Oriented software》
  作者:GOF
  读书建议:这本书比较难理解,不适合初学者,最后对设计模式有一定了解后再用这本书做总结。
2.《Thinking in Pattern with java》
  作者:Bruce Eckel
  比较好的入门书籍,缺点是只有实例代码没有类图,可以自己画。
3.《Applying UML and Patterns》
4.《Design Patterns Explained》
  这两本书都从设计的角度去看模式,应该在有一定的基础后用此书作为融会贯通。
5.《Anti Patterns》
  从不同的角度去看模式。
6.《Refactoring》

Responsive Design响应式网站设计心得笔记

网站刚上线半个月,就要改版为响应式设计,支持手机/PC等各类终端显示浏览。今天把首页做好,并测试无误,这里把一些应该记录的东西写下来,一是备忘,二是分享给需要的人。这次要讲的包括6个问题,1)html...
  • freshlover
  • freshlover
  • 2013年12月19日 22:29
  • 7130

pyshon实现一天前,一月前,一年前的日期计算

直接上代码 from operator import mod from datetime import datetime from datetime import timedelta import ...
  • huuuuuuuu
  • huuuuuuuu
  • 2017年06月09日 21:53
  • 316

冒泡排序学习心得(Java实现)

public class arrayDemo05 { public static void main(String args[]){ /* * 冒泡排序 */ int temp; int[...
  • luohehui1994
  • luohehui1994
  • 2016年05月11日 17:02
  • 206

Java编程思想学习心得(一)对象那些事儿

众所周知,Java是一门面向对象的语言,那么什么是面向对象?更简单的说,在编程的范畴里,什么是对象?这些问题是我们在学习任何一门面向对象的语言时都会面对的问题,解决了这些问题,更有助于我们学习面向对象...
  • haozipi
  • haozipi
  • 2015年11月27日 06:52
  • 843

盖洛普 打破一切常规心得体会(汇集)

 一个企业一个部门都是由不同的人员组成,每个人都有自已的优缺点,用好了企业或团队生机勃勃效率显著,用错了企业或团队死气沉沉效率低下,可以这么说,用人是管理工作中非常关键的一个环节。下面就让我们从几方面...
  • huwei2003
  • huwei2003
  • 2009年05月06日 14:20
  • 7319

java编程思想-继承心得

java面向对象编程的特性-继承
  • qq892618896
  • qq892618896
  • 2016年04月27日 15:13
  • 504

工作三年,对于设计模式的一点看法

工作三年,对于设计模式的一点小小看法。
  • a220315410
  • a220315410
  • 2013年07月12日 00:03
  • 2651

Java编程思想学习心得(序)

有句话说的好,读一百本书,不如一本书读一百遍。像《Java编程思想》这么经典的书更应该多读多想,以前只是读了很多遍,并没有适当的做一些总结,从这次读这本书开始,我会阶段性的写一些总结性的文章,这些文章...
  • haozipi
  • haozipi
  • 2015年11月25日 23:22
  • 712

浅谈自己学习设计模式的感受

对于开发工作者的世界,不管是开发讨论会上还是学习交流会上,更或者面试的时候,当提及设计模式,都会或多或少的让别人高看你一眼。为什么它会有这么强大的魅力呢!...
  • itest_2016
  • itest_2016
  • 2017年09月13日 11:37
  • 862

对MVC架构的理解

因为还不会MarkDown,就这样写了吧,以后有时间和心思再重构好了。 从开始学MVC架构开始,就没有弄清楚过其中每一个单词所代表的含义,这两天看了很多文章,反而有些迷糊了,不过还是把当下的结论记录...
  • lrm1293971805
  • lrm1293971805
  • 2017年04月12日 09:55
  • 452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一年前写的对模式的体会
举报原因:
原因补充:

(最多只允许输入30个字)