﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-爪哇岛-随笔分类-设计模式</title><link>http://www.blogjava.net/edsionsz/category/47837.html</link><description>关注java</description><language>zh-cn</language><lastBuildDate>Tue, 22 Feb 2011 03:24:45 GMT</lastBuildDate><pubDate>Tue, 22 Feb 2011 03:24:45 GMT</pubDate><ttl>60</ttl><item><title>需要掌握的JAVA设计模式</title><link>http://www.blogjava.net/edsionsz/archive/2011/02/22/344802.html</link><dc:creator>edsion</dc:creator><author>edsion</author><pubDate>Tue, 22 Feb 2011 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/edsionsz/archive/2011/02/22/344802.html</guid><wfw:comment>http://www.blogjava.net/edsionsz/comments/344802.html</wfw:comment><comments>http://www.blogjava.net/edsionsz/archive/2011/02/22/344802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edsionsz/comments/commentRss/344802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edsionsz/services/trackbacks/344802.html</trackback:ping><description><![CDATA[<strong>引言</strong> <br />
<br />
&nbsp;&nbsp;&nbsp; 设计模式是面向对象思想的集大成，GOF在其经典著作中总结了23种设计模式，又可分为：创建型、结构型和行为型3个大类。对于软件设计者来说，一般的过程就是在熟练掌握语言背景的基础上，了解类库的大致框架和常用的函数和接口等，然后多再在百般锤炼中，提高对软件设计思想的认识。 <br />
<br />
&nbsp;&nbsp;&nbsp; 软件设计者要清楚自己的定位和方向，一味的沉溺于技术细节的思路是制约个人技术走向成熟的毒药。因此，学习软件设计，了解软件工程，是每个开发人员必备的一课。笔者在此不想详细的描述各个设计模式的细节，我想google和baidu上的资料已经多如牛毛了。而且，争取的学习方法也不是了解所有的设计模式就可以无敌于天下。我所强调的学习方法就是在熟练掌握基本要素的基础上，了解大致的框架。这一条不仅是学习类库的方法，对设计模式来说是可行的。同时，切记的是在平时的积累中，不断的体会和实践。因此，本文的目的就是将23种模式中，必须掌握的几个最关键、最常用的设计模式，做以总结和简述。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">1 Factory Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：将程序中创建对象的操作，单独出来处理，大大提高了系统扩展的柔性，接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">2 Facade Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：将表现层和逻辑层隔离，封装底层的复杂处理，为用户提供简单的接口，这样的例子随处可见。门面模式很多时候更是一种系统架构的设计，在我所做的项目中，就实现了门面模式的接口，为复杂系统的解耦提供了最好的解决方案。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">3 Command Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：将请求封装为对象，从而将命令的执行和责任分开。通常在队列中等待命令，这和现实多么的相似呀。如果你喜欢发号施令，请考虑你的ICommond吧。
<p>&nbsp;&nbsp;&nbsp; <span style="color: red">4 Strategy Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：策略模式，将易于变化的部分封装为接口，通常Strategy 封装一些运算法则，使之能互换。Bruce Zhang在他的博客中提到策略模式其实是一种&#8220;面向接口&#8221;的编程方法，真是恰如其分。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">5 Iterator Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：相信任何的系统中，都会用到数组、集合、链表、队列这样的类型吧，那么你就不得不关心迭代模式的来龙去脉。在遍历算法中，迭代模式提供了遍历的顺序访问容器，GOF给出的定义为：提供一种方法访问一个容器（container）对象中各个元素，而又不需暴露该对象的内部细节。.NET中就是使用了迭代器来创建用于foreach的集合。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;6 Adapter Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：在原类型不做任何改变的情况下，扩展了新的接口，灵活且多样的适配一切旧俗。这种打破旧框框，适配新格局的思想，是面向对象的精髓。以继承方式实现的类的Adapter模式和以聚合方式实现的对象的Adapter模式，各有千秋，各取所长。看来，把它叫做包装器一点也不为过， <br />
<br />
　<span style="color: red">7 Observer Pattern</span> <br />
<br />
　上榜理由：定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。观察者和被观察者的分开，为模块划分提供了清晰的界限。在.NET中使用委托和事件可以更好的实现观察者模式，事件的注册和撤销不就对应着观察者对其对象的观察吗？&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">8 Bridge Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：把实现和逻辑分开，对于我们深刻理解面向对象的聚合复用的思想甚有助益。 <br />
&nbsp;　<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">9 Singleton Pattern</span>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 上榜理由：改善全局变量和命名空间的冲突，可以说是一种改良了的全局变量。这种一个类只有一个实例，且提供一个访问全局点的方式，更加灵活的保证了实例的创建和访问约束。.NET Frameeork已经封装了Singleton类，我们拿来即可。 <br />
<br />
&nbsp;&nbsp;&nbsp; <strong>总结</strong> <br />
<br />
&nbsp;&nbsp;&nbsp; 仁者见仁。以上只是笔者一家之言，更重要的真知灼见皆来源于实践，设计思想和模式的应用也来源于不断的学习和反复，我也将一如既往。此文只是开端，未来才是不断的探索。</p>
<div id="ParagraphCount" style="display: none">1</div>
 <img src ="http://www.blogjava.net/edsionsz/aggbug/344802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edsionsz/" target="_blank">edsion</a> 2011-02-22 10:19 <a href="http://www.blogjava.net/edsionsz/archive/2011/02/22/344802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>