JAVA设计模式总结之23种设计模式



《五灯会元》卷十七中,有一则唐朝禅师青原惟信禅师的语录:“老僧三十年前未参禅时,见山是山,见水是水。及至后来亲见知识,有个入处,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”

a)    仔细研究GoF的[设计模式],逐个学习其意图和结构,是一个抱着字典学习英语的方式。见山是山,见水是水,导致你可能在实际工作中生搬硬套、东施效颦。

b)    建议从简单的场景出发,自己发现或设计出某种模式。你从中体会该模式是如何解决问题的,这样,该模式成为你自己的东西,你才不会出现知易行难的问题。所有的设计模式不过是基本原则和理念在特定场合的应用。你可能不知道某个设计模式的名字,但是你知道它一切的优缺点和变体以及应用场合。见山不是山,见水不是水。

c)     你对基本原则和理念融会贯通,你可以惋惜:“我找到一种模式,原来在[设计模式](其实是某个特殊的书、文章提到的模式)中早就有了这种模式”。这时,模式不模式又如何呢?反模式又怎样。看见一个模式,你会说:“嗯,这是一种有用的模式”。见山只是山,见水只是水。

以上一点浅见。


注:【】中的内容是我加的。

1 转录【IT168知识库】

         发现很多初学设计模式的人都有一些特点就是学习了某个设计模式之后,貌似理解了,但是却不知道怎么去使用这些所谓的精华经验,苦于不知如何下手。我最初学习设计模式的时候也有类似的经验,我将我的经验分享出来,希望能对初学者有帮助。
        我对设计模式产生兴趣是在大概一年以前,最初看书的时候好像是看懂了,大概知道他在说什么。看了几个模式之后就开始寻找时机来套用套用这些模式。结果是除了Singleton模式以外的其他模式都没有找到应用的场所。然后我就没开始看下去了,我知道再看也没用,但是我并没有放弃对设计模式的关注。
        不久我就在MSDN的Webcast上看到李建忠的 C#面向对象设计模式纵横谈讲座,很不错的系列讲座,让我对设计模式有了新的理解。我意识到学习设计模式,确切的讲是学习面向对象的设计模式,应该从学习面向对象开始。【面向对象的原理如同了解下象棋的规则,而设计模式相当于残局,不知道规则看什么残局】由于之前一年都在做asp.net开发,虽然都是在写类、学着duwamish搞分层架构、搞类型化DataSet、也弄过自定义实体类,但好像一年下来还没怎么用过接口,什么多态也是极少用。事实上对面向对象的编程思想的认识还是很模糊的。
        重新认识OO:面向对象编程是一种思想,以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。面向对象的特点是封装,继承,多态【这些也算?】。所以从那是开始,当我设计一个类的时候,不断的提示自己以下三点:
第一:别把自己的数据公开,除非你要向别人提供数据,使用尽量低的访问权限。
第二:以一个外部的视角来看类,紧记不要要求别人要在知道你是怎么实现一个方法之后才能使用我的类。
第三:分清类的职责,该这个类做的事情就要在这个类中实现,不该我的类做的事情就让别的类去实现。
在这三点的指导下来写类,写程序开始像在做“设计”了^_^。
一段时间后对设计模式就慢慢有感觉了,并能够找到一些设计模式的应用场景了。并常套用套用那些模式,逐渐的加深对模式的理解,并把它变成自己的东西,能够在其他的地方灵活的用起来。

2. 转录 《易学设计模式·1.4  如何学习设计模式》郭志学 人民邮电出版社

如何学习设计模式
在了解了设计模式的历史和分类后,应该如何学习设计模式呢?在学习设计模式之前,读者一定要树立一种意识,那就是:设计模式并不只是一种方法和技术,它更是一种思想、一个方法论。它和具体的语言没有关系,学习设计模式最主要的目的就是要建立面向对象的思想,尽可能地面向接口编程、低耦合、高内聚,使你设计的程序尽可能地复用。【似是而非。学习设计模式能够更好理解面向对象的思想,设计模式是一些设计的技巧和窍门,不要上升到思想、方法论好不好
有些软件开发人员,在程序设计时,总想着往某个设计模式上套,其实这样是不对的,并没有真正掌握设计模式的思想。其实很多时候读者用了某种设计模式,只是自己不知道这个模式叫什么名字而已。因此,在程序设计时,要根据自己的理解,使用合适的设计模式。
而有另外一些软件开发人员,在程序设计时,动不动就给类起个类似模式的名字,比如叫某某Facade、某某Factory等,其实类里面的内容和设计模式根本没有一点关系,只是用来标榜自己懂设计模式而已。
因此,学习设计模式,首先要了解有哪些方面的设计模式可以供开发人员使用,然后再分别研究每个设计模式的原理,使用时机和方法,也就是说要在什么情况下才使用某个设计模式,在了解某个设计模式的使用时机时,还要了解此时如果不使用这个设计模式,会造成什么样的后果。当对每个模式的原理和使用方法都了解了以后,更重要的是,学习面向对象的思想方式,在掌握面向对象的思想方式后,再回过头来看设计模式,就会有更深刻的理解,最后,学习设计模式,一定要勤学多练。【就最后一句很赞同】

 

六、个人感悟                                                                                                                 

学习设计模式确实有几种境界:

第一种是学习了一两个设计模式,就一直想用到自己的代码中去;

第二种是学完全部设计模式,觉得很多模式都很相似,分不清楚它们之间有什么区别;

第三种是灵活运用设计模式,就算不用具体哪种模式也可以设计也高质量的代码,无剑胜有剑。

最后附上总结图:

感谢:博客园的chenssy  Bobby0322 等博主,看了你们写的博客后受益匪浅,谢谢。

接下来,从10月份开始学习JDK & JAVA 知识提高。

《五灯会元》卷十七中,有一则唐朝禅师青原惟信禅师的语录:“老僧三十年前未参禅时,见山是山,见水是水。及至后来亲见知识,有个入处,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”

a)    仔细研究GoF的[设计模式],逐个学习其意图和结构,是一个抱着字典学习英语的方式。见山是山,见水是水,导致你可能在实际工作中生搬硬套、东施效颦。

b)    建议从简单的场景出发,自己发现或设计出某种模式。你从中体会该模式是如何解决问题的,这样,该模式成为你自己的东西,你才不会出现知易行难的问题。所有的设计模式不过是基本原则和理念在特定场合的应用。你可能不知道某个设计模式的名字,但是你知道它一切的优缺点和变体以及应用场合。见山不是山,见水不是水。

c)     你对基本原则和理念融会贯通,你可以惋惜:“我找到一种模式,原来在[设计模式](其实是某个特殊的书、文章提到的模式)中早就有了这种模式”。这时,模式不模式又如何呢?反模式又怎样。看见一个模式,你会说:“嗯,这是一种有用的模式”。见山只是山,见水只是水。

以上一点浅见。


注:【】中的内容是我加的。

1 转录【IT168知识库】

         发现很多初学设计模式的人都有一些特点就是学习了某个设计模式之后,貌似理解了,但是却不知道怎么去使用这些所谓的精华经验,苦于不知如何下手。我最初学习设计模式的时候也有类似的经验,我将我的经验分享出来,希望能对初学者有帮助。
        我对设计模式产生兴趣是在大概一年以前,最初看书的时候好像是看懂了,大概知道他在说什么。看了几个模式之后就开始寻找时机来套用套用这些模式。结果是除了Singleton模式以外的其他模式都没有找到应用的场所。然后我就没开始看下去了,我知道再看也没用,但是我并没有放弃对设计模式的关注。
        不久我就在MSDN的Webcast上看到李建忠的 C#面向对象设计模式纵横谈讲座,很不错的系列讲座,让我对设计模式有了新的理解。我意识到学习设计模式,确切的讲是学习面向对象的设计模式,应该从学习面向对象开始。【面向对象的原理如同了解下象棋的规则,而设计模式相当于残局,不知道规则看什么残局】由于之前一年都在做asp.net开发,虽然都是在写类、学着duwamish搞分层架构、搞类型化DataSet、也弄过自定义实体类,但好像一年下来还没怎么用过接口,什么多态也是极少用。事实上对面向对象的编程思想的认识还是很模糊的。
        重新认识OO:面向对象编程是一种思想,以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。面向对象的特点是封装,继承,多态【这些也算?】。所以从那是开始,当我设计一个类的时候,不断的提示自己以下三点:
第一:别把自己的数据公开,除非你要向别人提供数据,使用尽量低的访问权限。
第二:以一个外部的视角来看类,紧记不要要求别人要在知道你是怎么实现一个方法之后才能使用我的类。
第三:分清类的职责,该这个类做的事情就要在这个类中实现,不该我的类做的事情就让别的类去实现。
在这三点的指导下来写类,写程序开始像在做“设计”了^_^。
一段时间后对设计模式就慢慢有感觉了,并能够找到一些设计模式的应用场景了。并常套用套用那些模式,逐渐的加深对模式的理解,并把它变成自己的东西,能够在其他的地方灵活的用起来。

2. 转录 《易学设计模式·1.4  如何学习设计模式》郭志学 人民邮电出版社

如何学习设计模式
在了解了设计模式的历史和分类后,应该如何学习设计模式呢?在学习设计模式之前,读者一定要树立一种意识,那就是:设计模式并不只是一种方法和技术,它更是一种思想、一个方法论。它和具体的语言没有关系,学习设计模式最主要的目的就是要建立面向对象的思想,尽可能地面向接口编程、低耦合、高内聚,使你设计的程序尽可能地复用。【似是而非。学习设计模式能够更好理解面向对象的思想,设计模式是一些设计的技巧和窍门,不要上升到思想、方法论好不好
有些软件开发人员,在程序设计时,总想着往某个设计模式上套,其实这样是不对的,并没有真正掌握设计模式的思想。其实很多时候读者用了某种设计模式,只是自己不知道这个模式叫什么名字而已。因此,在程序设计时,要根据自己的理解,使用合适的设计模式。
而有另外一些软件开发人员,在程序设计时,动不动就给类起个类似模式的名字,比如叫某某Facade、某某Factory等,其实类里面的内容和设计模式根本没有一点关系,只是用来标榜自己懂设计模式而已。
因此,学习设计模式,首先要了解有哪些方面的设计模式可以供开发人员使用,然后再分别研究每个设计模式的原理,使用时机和方法,也就是说要在什么情况下才使用某个设计模式,在了解某个设计模式的使用时机时,还要了解此时如果不使用这个设计模式,会造成什么样的后果。当对每个模式的原理和使用方法都了解了以后,更重要的是,学习面向对象的思想方式,在掌握面向对象的思想方式后,再回过头来看设计模式,就会有更深刻的理解,最后,学习设计模式,一定要勤学多练。【就最后一句很赞同】

 

六、个人感悟                                                                                                                 

学习设计模式确实有几种境界:

第一种是学习了一两个设计模式,就一直想用到自己的代码中去;

第二种是学完全部设计模式,觉得很多模式都很相似,分不清楚它们之间有什么区别;

第三种是灵活运用设计模式,就算不用具体哪种模式也可以设计也高质量的代码,无剑胜有剑。

最后附上总结图:

感谢:博客园的chenssy  Bobby0322 等博主,看了你们写的博客后受益匪浅,谢谢。

接下来,从10月份开始学习JDK & JAVA 知识提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值