﻿<?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/balajinima/category/26960.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 03 Nov 2009 10:46:02 GMT</lastBuildDate><pubDate>Tue, 03 Nov 2009 10:46:02 GMT</pubDate><ttl>60</ttl><item><title>Java 设计模式与建模专题-Java 建模</title><link>http://www.blogjava.net/balajinima/articles/299405.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Thu, 22 Oct 2009 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/299405.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/299405.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/299405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/299405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/299405.html</trackback:ping><description><![CDATA[<!--anchor_link_list_begin--><img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N101A0" cmimpressionsent="1">统一建模语言（UML）基础</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N101ED" cmimpressionsent="1">Java 建模：UML 工作簿</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N10222" cmimpressionsent="1">Java 建模：子整体软件开发</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1023F" cmimpressionsent="1">Java 建模语言（Java Modeling Language，JML）</a></td>
        </tr>
    </tbody>
</table>
<img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<img alt="" src="//www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" height="1" /><br />
<img alt="" src="//www.ibm.com/i/c.gif" width="443" height="1" /><br />
<!--anchor_link_list_end-->
<p>本专题为 Java 软件工程师们提供了面向 Java 的设计模式和建模方面相关的文章和教程。帮助读者理解、学习作为专业软件工程师必需掌握的设计模式与建模技术。</p>
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N101A0">统一建模语言（UML）基础</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/r-uml/" cmimpressionsent="1">UML基础：统一建模语言简介</a> </strong><br />
回顾 20 世纪晚期 -- 准确地说是 1997 年，OMG 组织（Object Management Group 对象管理组织）发布了统一建模语言（Unified Modeling Language，UML）。UML 的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML 提出了一套IT专业人员期待多年的统一的标准建模符号。通过使用 UML，这些人员能够阅读和交流系统架构和设计规划--就像建筑工人多年来所使用的建筑设计图一样。</p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/321_uml/" cmimpressionsent="1">统一建模语言(UML) 版本 2.0</a> </strong><br />
所谓的&#8220;模型驱动&#8221;开发（MDD）方式，已经显示出了它们从根本性上提高软件质量和开发生产力方面的潜力。与传统的方法相比，这种方式是基于较高层次上的抽象和更好的自动化利用的。由于建模语言对MDD的成功具有关键性的作用，所以最近完成了对基于工业标准的统一建模语言（UML）的主要修订。随着一些重要的新的建模能力添加到其中――比如更精确地获得软件架构的能力――这次修订的主要特性使得语言定义更加精确，从而达到了更高层次的自动化。这篇文章解释了这一特性是如何实现的，并且描述了 UML 2.0 的其他亮点。</p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/" cmimpressionsent="1">UML 基础：类图</a> </strong><br />
在 UML 2 中，作为新结构图类型的最重要实例，类图可以在整个软件开发生命周期中，被分析师，业务建模人员，开发者和测试者使用的。本文提供了全面的介绍。</p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/3101.html" cmimpressionsent="1">UML 基础：序列图</a> </strong><br />
本文作为 UML 基础的、关于统一建模语言的基础图的一系列文章的一部分，提供对序列图的详细介绍。它也介绍了最近的 UML 2.0 规范的几个新符号元件。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/bell.html" cmimpressionsent="1">UML 基础：组件图</a> </strong><br />
这篇文章介绍组件图，一个在新的统一建模语言 2.0 中规定的结构图。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/bell.html" cmimpressionsent="1">UML 基础：组件图</a> </strong><br />
这篇文章介绍组件图，一个在新的统一建模语言 2.0 中规定的结构图。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N101ED">Java 建模：UML 工作簿</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part1/" cmimpressionsent="1">Java 建模：UML 工作簿，第 1 部分：序列图简介 </a></strong><br />
Granville Miller 在其新专栏的第一部分中介绍了&#8220;统一建模语言&#8221;(UML) 的一个构件：序列图。在整个设计过程中都会用到序列图，此图用于演示系统执行时参与者与对象之间的内部交互。让我们跟着 Granville 一起创建其中一个图，我们将使用一个贷款处理应用程序作为示例。</p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part2/" cmimpressionsent="1">Java 建模： UML 工作簿：第 2 部分：序列图中的条件逻辑</a> </strong><br />
Granville 继续讨论&#8220;统一建模语言&#8221;和序列图的绘制。他仔细研究了序列图绘制过程中条件逻辑的角色，并讨论了为什么要在图中包含或排除条件和循环。Granville 还描述了序列图的两种形态 -- 常规和实例 -- 并说明了它们在开发周期中各自的应用。</p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part3/" cmimpressionsent="1">Java 建模： UML 工作簿，第 3 部分：在用例建模上的用户接口逻辑</a> </strong><br />
在这一部分的 Java 建模中，Granville 引领您进入介于建模和方法之间的区域，同时看一下通过用例建模所收集的需求。他特别着重讨论了用户接口、系统接口和用例描述之间的关系。尽管现在正试图在用例中包括用户接口逻辑，但这通常被认为是不好的形式。接着， Grancille 用序列图和系统接口告诉您具体原因。请点击文章顶部或底部的讨论，参与讨论论坛，与本文作者和其他读者分享您对本文的想法。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part6/" cmimpressionsent="1">Java 建模：UML 工作簿，第 4 部分 </a></strong><br />
本文深入讨论用例图的基本组件之一：参与者（actor）。参与者不仅在 UML 建模中不可或缺，而且在创建 Java 应用程序时，它也能起到很重要的作用，甚至可以就 J2EE 应用程序设计中的模式提出建议。对于开发诸如 Web 服务（在其系统设计中，外部交互扮演了很重要的角色）这样的复杂系统，参与者变得尤其重要。Granville 用序列图和类图来阐述参与者在用例图的绘制和 Java 应用程序开发中的角色。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N10222">Java 建模：子整体软件开发</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part4/" cmimpressionsent="1">Java 建模：子整体软件开发，第 1 部分：宣言</a> </strong><br />
Granville Miller 暂时放弃需求收集主题，着手讨论另一个引人入胜的主题：子整体软件编程。 让我们找找这个方法如何补充和扩展灵活开发运动原则，以及它在主流开发界中的出现如何可能改变软件开发者的教育和软件开发实践。请在 讨论论坛与作者和其他读者分享您关于本文的想法。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jmod/part5/" cmimpressionsent="1">Java 建模：子整体软件开发，第 2 部分：需求收集：工作的恰当过程</a> </strong><br />
Granville Miller 继续他关于子整体软件开发的讨论，并在概念上对需求收集作了概括。 让我们看看四个最常见的需求收集过程 ― 功能特性、用户情景、用例和传统的软件需求规范 ― 怎样适应灵活的软件开发过程更广阔的环境。 请在 讨论论坛与作者和其他读者分享您关于本文的想法。 过程太少，非凡的人能做平凡的事； 过程太多，即使是非凡的人也不能做非凡的事。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1023F">Java 建模语言（Java Modeling Language，JML）</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-jml/" cmimpressionsent="1">JML 入门</a> </strong><br />
Java 建模语言（Java Modeling Language，JML）是一种用来进行详细设计的表示法（notation），它倡导一种思考方法和类的新思路。在这篇入门文章中，Java 编程顾问 Joe Verzulli 介绍了 JML 及其一些最重要的说明构造。 </p>
<img src ="http://www.blogjava.net/balajinima/aggbug/299405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2009-10-22 17:31 <a href="http://www.blogjava.net/balajinima/articles/299405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 设计模式与建模专题-设计模式</title><link>http://www.blogjava.net/balajinima/articles/299404.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Thu, 22 Oct 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/299404.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/299404.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/299404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/299404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/299404.html</trackback:ping><description><![CDATA[<!--anchor_link_list_begin-->
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-graphic-tab-lblue-table"><img class="display-img" alt="" src="//www.ibm.com/i/c.gif" width="1" height="4" /></td>
        </tr>
        <tr>
            <td class="v14-graphic-tab-dblue-table"><img class="display-img" alt="" src="//www.ibm.com/i/c.gif" width="1" height="1" /></td>
        </tr>
    </tbody>
</table>
<img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N10043" cmimpressionsent="1">Factory Method 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1006C" cmimpressionsent="1">Singleton 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1007D" cmimpressionsent="1">Observer 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1008E" cmimpressionsent="1">State 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1009F" cmimpressionsent="1">控制反转（IoC）模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100B0" cmimpressionsent="1">Single Call 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100C1" cmimpressionsent="1">其它模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100EA" cmimpressionsent="1">反模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100FB" cmimpressionsent="1">从 Java 类库看设计模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1013C" cmimpressionsent="1">使用设计模式改善程序结构</a></td>
        </tr>
    </tbody>
</table>
<img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<img alt="" src="//www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" height="1" /><br />
<img alt="" src="//www.ibm.com/i/c.gif" width="443" height="1" /><br />
<!--anchor_link_list_end-->
<p>本专题为 Java 软件工程师们提供了面向 Java 的设计模式和建模方面相关的文章和教程。帮助读者理解、学习作为专业软件工程师必需掌握的设计模式与建模技术。</p>
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N10043">Factory Method 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-factory/" cmimpressionsent="1">Factory Method 模式在 Javamail 中的应用</a> </strong><br />
设计模式在软件工程中占有重要地位，而 JavaMail 是 Java 平台的一个扩展，为管理电子邮件提供了统一的应用编程接口。本文讨论 Factory Method 设计模式在Javamail 中的应用。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/designpattern/factory/" cmimpressionsent="1">在 Java 中应用设计模式 - Factory Method </a></strong><br />
在设计模式中,Factory Method也是比较简单的一个,但应用非常广泛，EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子，它是最重要的模式之一。在很多地方我们都会看到xxxFactory这样命名的类,那么,什么是Factory Method,为什么要用这个模式,如何用Java语言来实现该模式,这就是本文想要带给大家的内容。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-factorydp/" cmimpressionsent="1">Factory 模式的优点</a> </strong><br />
最常见的构造一个 Object 的方法是通过构造函数. 例: String strTemp = new String('Hello World'); 其实还有一种一种更灵活的创建Object 的方式---利用Factory 模式. 这是著名的'四人帮'(Gangs Of Four)的经典之作'设计模式'[(Design Pattern) 所记载的23模式之一. 它有着构造函数不可比拟的一些优点. </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1006C">Singleton 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/designpattern/singleton/" cmimpressionsent="1">在 Java 中应用设计模式 -- Singleton</a> </strong><br />
本文介绍了设计模式中 Singleton 的基本概念,对其功能和用途进行了简单的分析,列出了通常实现 Singleton 的几种方法,并给出了详细的Java 代码。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1007D">Observer 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-observerinj2ee/" cmimpressionsent="1">Observer 模式在 J2EE 中的实现</a> </strong><br />
设计模式是经验的文档化。它是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。更通俗的来说，它是一个问题/解决方案对。一旦我们掌握了设计模式，就等于拥有了一支强有力的专家队伍。它甚至能够使面向对象的新手利用前人的经验找出职责明确的类和对象，从而获得优雅的解决方案。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1008E">State 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-state/" cmimpressionsent="1">State 模式在客户端软件中的应用</a> </strong><br />
在对一个 J2EE 项目的重构、增加新功能的过程中，对客户端 GUI 程序，我们使用了 State 模式。结果显示，该模式的使用，不但减少了客户端 GUI 程序的程序规模（LOC），而且，该部分的开发及单元测试时间大大减少，同时，在集成测试中发现的缺陷数量比使用该模式前平均减少了3倍。本文就该项目中使用 State 模式的方式进行介绍。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1009F">控制反转（IoC）模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-ioc/" cmimpressionsent="1">在方法签名中使用控制反转（IoC）</a> </strong><br />
控制反转（IoC）模式通常用于组件。本文描述了如何对方法签名使用该模式，以减少组件间的耦合并改善性能。IBM Global Business Services 顾问 Andr Fachat 用两个例子展示了这种方法的灵活性。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100B0">Single Call 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-single-call/" cmimpressionsent="1">Single Call 模式</a> </strong><br />
在本文中，作者向大家讲述了 Single Call 模式的原理，同时也介绍了 Single Call 模式的实现问题。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100C1">其它模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/views/java/tutorials.jsp?cv_doc_id=84987" cmimpressionsent="1">Java 设计模式 201：超越四人组</a> </strong><br />
您可以在本教程中发现，到底还有多少设计模式您不知道。首先，我们会探讨一些资源，学习设计模式的新手通常会忽略它们。这些资源为各种计算领域（如商业应用程序、Web 应用程序，甚至 Web 设计）提供了极为有用的模式。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-lo-ui-assembler-pattern/" cmimpressionsent="1">界面组装器模式</a> </strong><br />
本文提出了一种界面设计中的架构模式－界面组装器模式，它致力于分解界面，将界面和组装行为解耦，将界面逻辑处理与领域逻辑处理解耦，这样我们在开发 GUI 胖客户端界面应用时可以从众多的界面控制管理中解脱出来，而专注于我们的后台业务逻辑的开发。通过该模式，我们可以动态地组装我们的界面，我们甚至还可以在我们的界面中轻松地插入 transaction 事务或 session 会话管理。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-lo-archpattern-validator/" cmimpressionsent="1">数据校验器架构模式组</a> </strong><br />
本文阐述软件架构与设计模式，它为架构师和开发人员提供了一组关于数据校验的架构模式（隔离校验器，可组装校验器，动态策略校验器，动态注册校验器等），数据校验是任何类型的开发中都不可或缺的环节，如果没有统一的架构，可能校验代码会遍布整个应用，如何将数据校验与应用逻辑解耦，如何适应各种粒度的数据和各种复杂程度业务规则，正是本文要探讨的。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100EA">反模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-bitterjava/" cmimpressionsent="1">反模式可以如何提高编程</a> </strong><br />
设计模式对软件开发来说很重要，这一点从它在技术贸易新闻中所占的数量就可见一斑。不过，鉴于其在开发过程中的实用性，设计模式只解决了问题的一半。反模式 ― 描述&#8220;对产生绝对负面结果的问题的一种常用解决方案&#8221; ― 旨在通过向 Java 程序员展示如何避免常见的 Java 陷阱来解决问题的另一半。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100FB">从 Java 类库看设计模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part1/" cmimpressionsent="1">从 Java 类库看设计模式，第一部分</a> </strong><br />
在这一部分的内容中，介绍的是一个相对简单但功能强大的模式：Observer 模式。希望通过这部分地叙述，大家看了之后，能够对设计模式有一个比较全面地，感性的认识。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part2/" cmimpressionsent="1">从 Java 类库看设计模式，第二部分</a> </strong><br />
这部分及以后的内容，将会步入正题，从 Java 类库的分析入手，来阐叙设计模式是如何应用到一个完美的设计中的。实际上，Java 类库非常的庞杂，这儿不可能把所有能够找到的设计模式的例子一一列举，只是找了一些容易发现的例子。实际上也没有必要，因为只要对一个设计模式有足够的理解，对于它的具体应用而言，倒是一件不是很困难的事情。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part3/" cmimpressionsent="1">从 Java 类库看设计模式，第三部分</a> </strong><br />
主要介绍几个结构型的模式如 Bridge 模式和 Decorator 模式。对于 Bridge 模式可能需要更多的理解，因为它在很大程度上说，例示了设计模式的基本的设计思路和原则。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part4/" cmimpressionsent="1">从 Java 类库看设计模式，第四部分</a> </strong><br />
在上一部分中，介绍了两个结构型的模式：Bridge和Decorator。这一部分的内容，将会接着上面的讲解，继续我们的设计模式之旅。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part5/" cmimpressionsent="1">从 Java 类库看设计模式，第五部分</a> </strong><br />
有了前面诸多设计模式的基础，这儿可以提出一个比较特殊的模式 MVC。MVC并不属于 GOF 的 23 个设计模式之列，但是它在 GOF 的书中作为一个重要的例子被提出来，并给予了很高的评价。一般的来讲，我们认为GOF的23个模式是一些中级的模式，在它下面还可以抽象出一些更为一般的低层的模式，在其上也可以通过组合来得到一些高级的模式。MVC就可以看作是一些模式进行组合之后的结果（实际上，MVC的出现要早于设计模式的提出，这而只是对它在设计模式的基础上进行在分析）。如果没有前面的基础，理解MVC或许会有一些困难。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1013C">使用设计模式改善程序结构</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part1/" cmimpressionsent="1">使用设计模式改善程序结构（一）</a> </strong><br />
设计模式是对特定问题经过无数次经验总结后提出的能够解决它的优雅的方案。但是，如果想要真正使设计模式发挥最大作用，仅仅知道设计模式是什么，以及它是如何实现的是很不够的，因为那样就不能使你对于设计模式有真正的理解，也就不能够在自己的设计中正确、恰当的使用设计模式。本文试图从另一个角度（设计模式的意图、动机）来看待设计模式，通过这种新的思路，设计模式会变得非常贴近你的设计过程，并且能够指导、简化你的设计，最终将会导出一个优秀的解决方案。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part2/" cmimpressionsent="1">使用设计模式改善程序结构（二）</a> </strong><br />
在本系列的第一篇文章中，描述了如何通过设计模式来指导我们的程序重构过程，并且着重介绍了设计模式意图、动机的重要性。在本文中我们将继续上篇文章进行讨论，这次主要着重于设计模式的适用性，对于设计模式适用性的掌握有助于从另一个不同的方面来判断一个设计模式是否真正适用于我们的实际问题，从而做出明智的选择。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part3/" cmimpressionsent="1">使用设计模式改善程序结构（三）</a> </strong><br />
设计模式在某种程度上确实能够改善我们的程序结构，使设计具有更好的弹性。也正是由于这个原因，会导致我们可能过度的使用它。程序结构具有过度的、不必要的灵活性和程序结构没有灵活性一样都是有害的</p>
<table border="0" cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <td class="v14-graphic-tab-selected2"><img class="display-img" alt="" src="//www.ibm.com/i/c.gif" width="7" height="19" /></td>
            <td class="v14-graphic-tab-selected"><a class="v14-tab-link-selected" onmouseover="linkQueryAppend(this)" href="index.html" cmimpressionsent="1">设计模式</a></td>
            <td class="v14-tab-hlrt2"><img alt="" src="//www.ibm.com/i/c.gif" width="24" height="1" /></td>
            <td class="v14-graphic-tab-unselected"><a class="v14-tab-link-unselected" onmouseover="linkQueryAppend(this)" href="http://www.ibm.com/developerworks/cn/java/design/model.html?S_TACT=105AGX52&amp;S_CMP=tec-csdn" cmimpressionsent="1" doneonce="true">Java 建模</a></td>
            <td class="v14-tab-dmrt-end2"><img alt="" src="//www.ibm.com/i/c.gif" width="24" height="1" /></td>
        </tr>
    </tbody>
</table>
<!--anchor_link_list_begin-->
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-graphic-tab-lblue-table"><img class="display-img" alt="" src="//www.ibm.com/i/c.gif" width="1" height="4" /></td>
        </tr>
        <tr>
            <td class="v14-graphic-tab-dblue-table"><img class="display-img" alt="" src="//www.ibm.com/i/c.gif" width="1" height="1" /></td>
        </tr>
    </tbody>
</table>
<img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N10043" cmimpressionsent="1">Factory Method 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1006C" cmimpressionsent="1">Singleton 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1007D" cmimpressionsent="1">Observer 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1008E" cmimpressionsent="1">State 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1009F" cmimpressionsent="1">控制反转（IoC）模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100B0" cmimpressionsent="1">Single Call 模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100C1" cmimpressionsent="1">其它模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100EA" cmimpressionsent="1">反模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N100FB" cmimpressionsent="1">从 Java 类库看设计模式</a></td>
        </tr>
        <tr valign="top">
            <td width="16"><img alt="" src="//www.ibm.com/i/v14/icons/d_bold.gif" width="16" height="16" /></td>
            <td width="100%"><a class="fbox" href="#N1013C" cmimpressionsent="1">使用设计模式改善程序结构</a></td>
        </tr>
    </tbody>
</table>
<img alt="" src="//www.ibm.com/i/c.gif" width="1" height="5" /><br />
<img alt="" src="//www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" height="1" /><br />
<img alt="" src="//www.ibm.com/i/c.gif" width="443" height="1" /><br />
<!--anchor_link_list_end-->
<p>本专题为 Java 软件工程师们提供了面向 Java 的设计模式和建模方面相关的文章和教程。帮助读者理解、学习作为专业软件工程师必需掌握的设计模式与建模技术。</p>
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N10043">Factory Method 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-factory/" cmimpressionsent="1">Factory Method 模式在 Javamail 中的应用</a> </strong><br />
设计模式在软件工程中占有重要地位，而 JavaMail 是 Java 平台的一个扩展，为管理电子邮件提供了统一的应用编程接口。本文讨论 Factory Method 设计模式在Javamail 中的应用。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/designpattern/factory/" cmimpressionsent="1">在 Java 中应用设计模式 - Factory Method </a></strong><br />
在设计模式中,Factory Method也是比较简单的一个,但应用非常广泛，EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子，它是最重要的模式之一。在很多地方我们都会看到xxxFactory这样命名的类,那么,什么是Factory Method,为什么要用这个模式,如何用Java语言来实现该模式,这就是本文想要带给大家的内容。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-factorydp/" cmimpressionsent="1">Factory 模式的优点</a> </strong><br />
最常见的构造一个 Object 的方法是通过构造函数. 例: String strTemp = new String('Hello World'); 其实还有一种一种更灵活的创建Object 的方式---利用Factory 模式. 这是著名的'四人帮'(Gangs Of Four)的经典之作'设计模式'[(Design Pattern) 所记载的23模式之一. 它有着构造函数不可比拟的一些优点. </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1006C">Singleton 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/designpattern/singleton/" cmimpressionsent="1">在 Java 中应用设计模式 -- Singleton</a> </strong><br />
本文介绍了设计模式中 Singleton 的基本概念,对其功能和用途进行了简单的分析,列出了通常实现 Singleton 的几种方法,并给出了详细的Java 代码。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1007D">Observer 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-observerinj2ee/" cmimpressionsent="1">Observer 模式在 J2EE 中的实现</a> </strong><br />
设计模式是经验的文档化。它是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。更通俗的来说，它是一个问题/解决方案对。一旦我们掌握了设计模式，就等于拥有了一支强有力的专家队伍。它甚至能够使面向对象的新手利用前人的经验找出职责明确的类和对象，从而获得优雅的解决方案。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1008E">State 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-state/" cmimpressionsent="1">State 模式在客户端软件中的应用</a> </strong><br />
在对一个 J2EE 项目的重构、增加新功能的过程中，对客户端 GUI 程序，我们使用了 State 模式。结果显示，该模式的使用，不但减少了客户端 GUI 程序的程序规模（LOC），而且，该部分的开发及单元测试时间大大减少，同时，在集成测试中发现的缺陷数量比使用该模式前平均减少了3倍。本文就该项目中使用 State 模式的方式进行介绍。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1009F">控制反转（IoC）模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-ioc/" cmimpressionsent="1">在方法签名中使用控制反转（IoC）</a> </strong><br />
控制反转（IoC）模式通常用于组件。本文描述了如何对方法签名使用该模式，以减少组件间的耦合并改善性能。IBM Global Business Services 顾问 Andr Fachat 用两个例子展示了这种方法的灵活性。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100B0">Single Call 模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-single-call/" cmimpressionsent="1">Single Call 模式</a> </strong><br />
在本文中，作者向大家讲述了 Single Call 模式的原理，同时也介绍了 Single Call 模式的实现问题。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100C1">其它模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/views/java/tutorials.jsp?cv_doc_id=84987" cmimpressionsent="1">Java 设计模式 201：超越四人组</a> </strong><br />
您可以在本教程中发现，到底还有多少设计模式您不知道。首先，我们会探讨一些资源，学习设计模式的新手通常会忽略它们。这些资源为各种计算领域（如商业应用程序、Web 应用程序，甚至 Web 设计）提供了极为有用的模式。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-lo-ui-assembler-pattern/" cmimpressionsent="1">界面组装器模式</a> </strong><br />
本文提出了一种界面设计中的架构模式－界面组装器模式，它致力于分解界面，将界面和组装行为解耦，将界面逻辑处理与领域逻辑处理解耦，这样我们在开发 GUI 胖客户端界面应用时可以从众多的界面控制管理中解脱出来，而专注于我们的后台业务逻辑的开发。通过该模式，我们可以动态地组装我们的界面，我们甚至还可以在我们的界面中轻松地插入 transaction 事务或 session 会话管理。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-lo-archpattern-validator/" cmimpressionsent="1">数据校验器架构模式组</a> </strong><br />
本文阐述软件架构与设计模式，它为架构师和开发人员提供了一组关于数据校验的架构模式（隔离校验器，可组装校验器，动态策略校验器，动态注册校验器等），数据校验是任何类型的开发中都不可或缺的环节，如果没有统一的架构，可能校验代码会遍布整个应用，如何将数据校验与应用逻辑解耦，如何适应各种粒度的数据和各种复杂程度业务规则，正是本文要探讨的。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100EA">反模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/j-bitterjava/" cmimpressionsent="1">反模式可以如何提高编程</a> </strong><br />
设计模式对软件开发来说很重要，这一点从它在技术贸易新闻中所占的数量就可见一斑。不过，鉴于其在开发过程中的实用性，设计模式只解决了问题的一半。反模式 ― 描述&#8220;对产生绝对负面结果的问题的一种常用解决方案&#8221; ― 旨在通过向 Java 程序员展示如何避免常见的 Java 陷阱来解决问题的另一半。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N100FB">从 Java 类库看设计模式</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part1/" cmimpressionsent="1">从 Java 类库看设计模式，第一部分</a> </strong><br />
在这一部分的内容中，介绍的是一个相对简单但功能强大的模式：Observer 模式。希望通过这部分地叙述，大家看了之后，能够对设计模式有一个比较全面地，感性的认识。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part2/" cmimpressionsent="1">从 Java 类库看设计模式，第二部分</a> </strong><br />
这部分及以后的内容，将会步入正题，从 Java 类库的分析入手，来阐叙设计模式是如何应用到一个完美的设计中的。实际上，Java 类库非常的庞杂，这儿不可能把所有能够找到的设计模式的例子一一列举，只是找了一些容易发现的例子。实际上也没有必要，因为只要对一个设计模式有足够的理解，对于它的具体应用而言，倒是一件不是很困难的事情。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part3/" cmimpressionsent="1">从 Java 类库看设计模式，第三部分</a> </strong><br />
主要介绍几个结构型的模式如 Bridge 模式和 Decorator 模式。对于 Bridge 模式可能需要更多的理解，因为它在很大程度上说，例示了设计模式的基本的设计思路和原则。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part4/" cmimpressionsent="1">从 Java 类库看设计模式，第四部分</a> </strong><br />
在上一部分中，介绍了两个结构型的模式：Bridge和Decorator。这一部分的内容，将会接着上面的讲解，继续我们的设计模式之旅。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-jdkdp/part5/" cmimpressionsent="1">从 Java 类库看设计模式，第五部分</a> </strong><br />
有了前面诸多设计模式的基础，这儿可以提出一个比较特殊的模式 MVC。MVC并不属于 GOF 的 23 个设计模式之列，但是它在 GOF 的书中作为一个重要的例子被提出来，并给予了很高的评价。一般的来讲，我们认为GOF的23个模式是一些中级的模式，在它下面还可以抽象出一些更为一般的低层的模式，在其上也可以通过组合来得到一些高级的模式。MVC就可以看作是一些模式进行组合之后的结果（实际上，MVC的出现要早于设计模式的提出，这而只是对它在设计模式的基础上进行在分析）。如果没有前面的基础，理解MVC或许会有一些困难。 </p>
<br />
<br />
<!--spacer--><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="v14-header-3"><a name="N1013C">使用设计模式改善程序结构</a></td>
        </tr>
    </tbody>
</table>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part1/" cmimpressionsent="1">使用设计模式改善程序结构（一）</a> </strong><br />
设计模式是对特定问题经过无数次经验总结后提出的能够解决它的优雅的方案。但是，如果想要真正使设计模式发挥最大作用，仅仅知道设计模式是什么，以及它是如何实现的是很不够的，因为那样就不能使你对于设计模式有真正的理解，也就不能够在自己的设计中正确、恰当的使用设计模式。本文试图从另一个角度（设计模式的意图、动机）来看待设计模式，通过这种新的思路，设计模式会变得非常贴近你的设计过程，并且能够指导、简化你的设计，最终将会导出一个优秀的解决方案。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part2/" cmimpressionsent="1">使用设计模式改善程序结构（二）</a> </strong><br />
在本系列的第一篇文章中，描述了如何通过设计模式来指导我们的程序重构过程，并且着重介绍了设计模式意图、动机的重要性。在本文中我们将继续上篇文章进行讨论，这次主要着重于设计模式的适用性，对于设计模式适用性的掌握有助于从另一个不同的方面来判断一个设计模式是否真正适用于我们的实际问题，从而做出明智的选择。 </p>
<p><strong><a href="http://www.ibm.com/developerworks/cn/java/l-dpstruct/part3/" cmimpressionsent="1">使用设计模式改善程序结构（三）</a> </strong><br />
设计模式在某种程度上确实能够改善我们的程序结构，使设计具有更好的弹性。也正是由于这个原因，会导致我们可能过度的使用它。程序结构具有过度的、不必要的灵活性和程序结构没有灵活性一样都是有害的</p>
<img src ="http://www.blogjava.net/balajinima/aggbug/299404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2009-10-22 17:27 <a href="http://www.blogjava.net/balajinima/articles/299404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>追MM与23种设计模式(转载)</title><link>http://www.blogjava.net/balajinima/articles/266988.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Wed, 22 Apr 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/266988.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/266988.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/266988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/266988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/266988.html</trackback:ping><description><![CDATA[1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory <br /><br />　　工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。 <br /><br />　　2、BUILDER—MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你”builder。（这一定比美军在伊拉克用的翻译机好卖） <br /><br />　　建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 <br /><br />　　3、FACTORY METHOD—请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。 <br /><br />　　工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。 <br /><br />　　4、PROTOTYPE—跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。（100块钱一份，你要不要） <br /><br />　　原始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 <br /><br />　　5、SINGLETON—俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事) <br /><br />　　单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 <br /><br />      结构型模式 <br /><br />　　6、ADAPTER—在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我) <br /><br />　　适配器（变压器）模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。 <br /><br />　　7、BRIDGE—早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了 <br /><br />　　桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。 <br /><br />　　8、COMPOSITE—Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。”“……”，MM都会用Composite模式了，你会了没有？ <br /><br />　　合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 <br /><br />　　9、DECORATOR—Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上“最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框（卖礼品的MM也很漂亮哦），再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？ <br /><br />　　装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。 <br /><br />　　10、FACADE—我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。 <br /><br />　　门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。 <br /><br />　　11、FLYWEIGHT—每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。 <br /><br />　　享元模式：FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。 <br /><br />　　12、PROXY—跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀？”“你多大了？”“身高多少呀？”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自动的回答，接收到其他的话时再通知我回答，怎么样，酷吧。 <br /><br />　　代理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。 <br /><br />    行为模式 <br /><br />　　13、CHAIN OF RESPONSIBLEITY—晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友吗？如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑! <br /><br />　　责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接 <br /><br />　　起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。 <br /><br />　　14、COMMAND—俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面。”， <br /><br />　　命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行，何时被执行以及是怎么被执行的。系统支持命令的撤消。 <br /><br />　　15、INTERPRETER—俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。 <br /><br />　　解释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。 <br /><br />　　16、ITERATOR—我爱上了Mary，不顾一切的向她求婚。 <br /><br />　　Mary：“想要我跟你结婚，得答应我的条件” <br /><br />　　我：“什么条件我都答应，你说吧” <br /><br />　　Mary：“我看上了那个一克拉的钻石” <br /><br />　　我：“我买，我买，还有吗？” <br /><br />　　Mary：“我看上了湖边的那栋别墅” <br /><br />　　我：“我买，我买，还有吗？” <br /><br />　　Mary：“我看上那辆法拉利跑车” <br /><br />　　我脑袋嗡的一声，坐在椅子上，一咬牙：“我买，我买，还有吗？” <br /><br />　　…… <br /><br />　　迭代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。 <br /><br />　　17、MEDIATOR—四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。 <br /><br />　　调停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。 <br /><br />　　18、MEMENTO—同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。 <br /><br />　　备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。 <br /><br />　　19、OBSERVER—想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者（观察者）就可以及时收到情报啦 <br /><br />　　观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。 <br /><br />　　20、STATE—跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”，对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么？”，已经喜欢上你的MM就会说“几点钟？看完电影再去泡吧怎么样？”，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。 <br /><br />　　状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。 <br /><br />　　21、STRATEGY—跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。 <br /><br />　　策略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响到环境和客户端。 <br /><br />　　22、TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)； <br /><br />　　模板方法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。 <br /><br />　　23、VISITOR—情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了； <br /><br />　　访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。<img src ="http://www.blogjava.net/balajinima/aggbug/266988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2009-04-22 14:46 <a href="http://www.blogjava.net/balajinima/articles/266988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的工厂模式</title><link>http://www.blogjava.net/balajinima/articles/182132.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Tue, 26 Feb 2008 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/182132.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/182132.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/182132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/182132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/182132.html</trackback:ping><description><![CDATA[
		<p>工厂模式的思想主要为：多个类似的子类继承同一个父类，对其父类中的变量进行操作；工厂类负责判断、控制哪个子类被执行，而工厂类调用子类完成后，返回的结果是该子类的父类，该父类中的变量已经被操作过了，访问该父类，得到我们想要的结果。<br />public class Father    {<br />    protected static String one;<br />    protected static String two;<br />}</p>
		<p> class Son1 extends Father<br />   {<br />    public Son1()<br />       {<br />        one="son1";<br />    }<br />}</p>
		<p> class Son2 extends Father<br />   {<br />    public Son2()<br />       {<br />        one="son2";<br />    }<br />}</p>
		<p> class Factory<br />   {<br />    public Father getSon(String s)<br />       {<br />        if(s.equals("1"))<br />           {<br />            return new Son1();<br />        }<br />        else<br />           {<br />            return new Son2();<br />        }<br />    }<br />    <br />    //main<br />    public static void main(String [] args)<br />       {<br />        Factory factory=new Factory();<br />        Father father=factory.getSon("2");<br />        <br />        //print<br />        System.out.println(father.one);<br />        System.out.println(father.two);<br />    }<br />}</p>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/balajinima/aggbug/182132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2008-02-26 09:29 <a href="http://www.blogjava.net/balajinima/articles/182132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大道至简-Java之23种模式一点就通</title><link>http://www.blogjava.net/balajinima/articles/157391.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Thu, 01 Nov 2007 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/157391.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/157391.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/157391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/157391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/157391.html</trackback:ping><description><![CDATA[
		<center>
				<font class="word3">
				</font> </center>
		<p>
		</p>创建型模式 <br /><br />FACTORY—人才市场：以往是要哪个人才，就找哪个人才，效率低，现在有了人才市场，我们只需 <br />直接去人才市场挑一个好了； <br /><br />BUILDER—生产流水线：以前是手工业作坊式的人工单个单个的生产零件然后一步一步组装做，好 <br />比有了工业革命，现在都由生产流水线代替了。如要造丰田汽车，先制定汽车的构造如由车胎、方 <br />向盘、发动机组成。再以此构造标准生产丰田汽车的车胎、方向盘、发动机。然后进行组装。最后 <br />得到丰田汽车； <br /><br />PROTOTYPE—印刷术的发明：以前只能临贴才能保持和别人的字迹基本相同，直从印刷技术发明， <br />从而保证了复制得和原物一模一样； <br /><br />SINGLETON—唯一：以前是商标满天飞，相同的商标难免造成侵权，直从有商标保护法后，就保证 <br />了不会再产生第家企业使用相同的商标； <br />结构型模式 <br /><br />ADAPTER—集众人之私，成一己之公：武当派张三丰会太极拳，少林派智空大师会金刚般若掌，如 <br />果他们两个都成为我的师傅，我就既会太极拳，又会金刚般若掌了； <br /><br />DECORATOR—青出于蓝而胜于蓝：武当派张三丰会太极拳，是我师傅，他教会了我太极拳，但我自 <br />己还会点蒙古式摔交，张三丰却不会。于是我就成了DECORATOR模式的实现； <br /><br />BRIDGE—白马非马：马之颜色有黑白，马之性别有公母。我们说”这是马”太抽象，说”这是黑色 <br />的公马”又太死板，只有将颜色与性别和马动态组合，”这是（黑色的或白色的）（公或母）马” <br />才显得灵活而飘逸，如此bridge模式精髓得矣。 <br /><br />COMPOSITE—大家族：子又生孙，孙又生子，子子孙孙，无穷尽也，将众多纷杂的人口组织成一个 <br />按辈分排列的大家族即是此模式的实现； <br /><br />FACADE—求同存异：高中毕业需读初中和高中，博士也需读初中和高中，因此国家将初中和高中普 <br />及成九年制义务教育； <br /><br />FLYWEIGHT—一劳永逸：认识三千汉字，可以应付日常读书与写字，可见头脑中存在这个汉字库的 <br />重要； <br /><br />PROXY—垂帘听政：犹如清朝康熙年间的四大府臣，很多权利不在皇帝手里，必须通过辅佐大臣去 <br />办； <br /><br /><br />行为模式 <br /><br />CHAIN OF RESPONSIBLEITY—租房：以前为了找房到处打听，效率低且找不到好的房源。现在有了 <br />房屋中介，于是向房屋中介提出租房请求，中介提供一个合适的房源，满意则不再请求，不满意 <br />继续看房，直到满意为止； <br /><br />COMMAND—借刀杀人：以前是想杀谁就杀，但一段时间后领悟到，长此以往必将结仇太多，于是假 <br />手他人，挑拨他人之间的关系从而达到自己的目的； <br /><br />INTERPRETER—文言文注释：一段文言文，将它翻译成白话文； <br /><br />ITERATOR—赶尽杀绝：一个一个的搜索，绝不放掉一个； <br /><br />MEDIATOR—三角债：本来千头万绪的债务关系，忽出来一中介，包揽其一切，于是三角关系变成了 <br />独立的三方找第四方中介的关系； <br /><br />MEMENTO—有福同享：我有多少，你就有多少； <br /><br />OBSERVER—看守者：一旦被看守者有什么异常情况，定会及时做出反应； <br /><br />STATE—进出自由：如一扇门，能进能出，如果有很多人随时进进出出必定显得杂乱而安全，如今 <br />设一保安限制其进出，如此各人进出才显得规范； <br /><br />STRATEGY—久病成良医：如人生病可以有各种症状，但经过长期摸索，就可以总结出感冒、肺病、 <br />肝炎等几种； <br /><br /><br />TEMPLATE METHOD——理论不一定要实践：教练的学生会游泳就行了，至于教练会不会则无关紧要； <br /><br />VISITOR—依法治罪：因张三杀人要被处死，李四偷窃要被罚款。由此势必制定处罚制度，故制定 <br />法律写明杀人、放火、偷窃等罪要受什么处罚，经通过后须变动要小。今后有人犯罪不管是谁，按 <br />共条例处罚即是，这就是访问者模式诞生的全过程；<img src ="http://www.blogjava.net/balajinima/aggbug/157391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-11-01 09:45 <a href="http://www.blogjava.net/balajinima/articles/157391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单例模式传参数</title><link>http://www.blogjava.net/balajinima/articles/155628.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Wed, 24 Oct 2007 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/155628.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/155628.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/155628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/155628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/155628.html</trackback:ping><description><![CDATA[
		<p>
				<br />import java.util.HashMap;<br />import java.util.Map;</p>
		<p>public class MyParam {</p>
		<p> private MyParam() {<br /> }</p>
		<p> private static Map usrParamMap = new HashMap();</p>
		<p> private static MyParam instance = new MyParam();</p>
		<p> public static MyParam getInstance() {<br />  return instance;<br /> }</p>
		<p> public String getParam(String usrId) {<br />  return usrParamMap.get(usrId).toString();<br /> }</p>
		<p> public void putParam(String usrId, String param) {<br />  usrParamMap.put(usrId, param);<br /> }<br />}<br /></p>
<img src ="http://www.blogjava.net/balajinima/aggbug/155628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-10-24 16:40 <a href="http://www.blogjava.net/balajinima/articles/155628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]关于23种设计模式的有趣见解 </title><link>http://www.blogjava.net/balajinima/articles/146892.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Thu, 20 Sep 2007 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/146892.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/146892.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/146892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/146892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/146892.html</trackback:ping><description><![CDATA[
		<br />
		<div style="MARGIN-TOP: 1px; MARGIN-LEFT: 15px">
				<h2>
						<a title="永久链接：[转载]关于23种设计模式的有趣见解  " href="http://kenshinlk.javaeye.com/blog/59112">
								<font color="#002c99">[转载]关于23种设计模式的有趣见解 </font>
						</a>
				</h2>
		</div>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<b>关键字:</b>   23种设计模式      </div>
		<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px; OVERFLOW: auto">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>
														<font face="Arial">关于23种设计模式的有趣见解  <br />[关键字]23种设计模式  <br />创建型模式 </font>
												</p>
												<p>
														<font face="Arial">1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory </font>
												</p>
												<p>
														<font face="Arial">工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。 </font>
												</p>
												<p>
														<font face="Arial">2、BUILDER—MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你”builder。（这一定比美军在伊拉克用的翻译机好卖） </font>
												</p>
												<p>
														<font face="Arial">建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 </font>
												</p>
												<p>
														<font face="Arial">3、FACTORY METHOD—请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。 </font>
												</p>
												<p>
														<font face="Arial">工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。 </font>
												</p>
												<p>
														<font face="Arial">4、PROTOtype—跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。（100块钱一份，你要不要） </font>
												</p>
												<p>
														<font face="Arial">原始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 </font>
												</p>
												<p>
														<font face="Arial">5、SINGLETON—俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事) </font>
												</p>
												<p>
														<font face="Arial">单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 </font>
												</p>
												<p>
														<font face="Arial">结构型模式 </font>
												</p>
												<p>
														<font face="Arial">6、ADAPTER—在朋友聚会上碰到了一个美女SArah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我) </font>
												</p>
												<p>
														<font face="Arial">适配器（变压器）模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。 </font>
												</p>
												<p>
														<font face="Arial">7、BRIDGE—早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了 </font>
												</p>
												<p>
														<font face="Arial">桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。 </font>
												</p>
												<p>
														<font face="Arial">8、COMPOSITE—Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。”“……”，MM都会用Composite模式了，你会了没有？ </font>
												</p>
												<p>
														<font face="Arial">合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 </font>
												</p>
												<p>
														<font face="Arial">9、DECORATOR—Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上“最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框（卖礼品的MM也很漂亮哦），再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？ </font>
												</p>
												<p>
														<font face="Arial">装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。 </font>
												</p>
												<font face="Arial">
														<p>
																<br />10、FACADE—我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。 </p>
														<p>门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。 </p>
														<p>11、FLYWEIGHT—每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。 </p>
														<p>享元模式：FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。 </p>
														<p>12、PROXY—跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀？”“你多大了？”“身高多少呀？”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自动的回答，接收到其他的话时再通知我回答，怎么样，酷吧。 </p>
														<p>代理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。 </p>
														<p>行为模式 </p>
														<p>13、CHAIN OF RESPONSIBLEITY—晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友吗？如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑! </p>
														<p>责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接 </p>
														<p>起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。 </p>
														<p>14、COMMAND—俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面。”，:-( </p>
														<p>命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行，何时被执行以及是怎么被执行的。系统支持命令的撤消。 </p>
														<p>15、INTERPRETER—俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。 </p>
														<p>解释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。 </p>
														<p> </p>
														<p>16、ITERATOR—我爱上了Mary，不顾一切的向她求婚。 </p>
														<p>Mary：“想要我跟你结婚，得答应我的条件” </p>
														<p>我：“什么条件我都答应，你说吧” </p>
														<p>Mary：“我看上了那个一克拉的钻石” </p>
														<p>我：“我买，我买，还有吗？” </p>
														<p>Mary：“我看上了湖边的那栋别墅” </p>
														<p>我：“我买，我买，还有吗？” </p>
														<p>Mary：“你的小弟弟必须要有50CM长” </p>
														<p>我脑袋嗡的一声，坐在椅子上，一咬牙：“我剪，我剪，还有吗？” </p>
														<p>…… </p>
														<p>迭代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。 </p>
														<p>17、MEDIATOR—四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。 </p>
														<p>调停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。 </p>
														<p>18、MEMENTO—同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。 </p>
														<p>备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。 </p>
														<p>19、OBSERVER—想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者（观察者）就可以及时收到情报啦 </p>
														<p>观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。 </p>
														<p>20、STATE—跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”，对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么？”，已经喜欢上你的MM就会说“几点钟？看完电影再去泡吧怎么样？”，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。 </p>
														<p>状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。 <br />21、STRATEGY—跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。 </p>
														<p>策略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响到环境和客户端。 </p>
														<p>22、TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)； </p>
														<p>模板方法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。 </p>
														<p>23、VISITOR—情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了； </p>
														<p>访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。<br /> <br /></p>
												</font>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/balajinima/aggbug/146892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-09-20 19:33 <a href="http://www.blogjava.net/balajinima/articles/146892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>