﻿<?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/dayue/category/21385.html</link><description>像疯子一样去战斗！</description><language>zh-cn</language><lastBuildDate>Mon, 30 Apr 2007 09:55:06 GMT</lastBuildDate><pubDate>Mon, 30 Apr 2007 09:55:06 GMT</pubDate><ttl>60</ttl><item><title>面向对象设计（OOD）原则</title><link>http://www.blogjava.net/dayue/archive/2007/04/30/114789.html</link><dc:creator>dayue</dc:creator><author>dayue</author><pubDate>Mon, 30 Apr 2007 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/dayue/archive/2007/04/30/114789.html</guid><wfw:comment>http://www.blogjava.net/dayue/comments/114789.html</wfw:comment><comments>http://www.blogjava.net/dayue/archive/2007/04/30/114789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dayue/comments/commentRss/114789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dayue/services/trackbacks/114789.html</trackback:ping><description><![CDATA[<ol>
    <li>单一职责原则（SRP）：一个类应当只有一个改变的原因，类只需要知道一件事情，它们应当有一个单独的职责，要点就是当一个类需要改变时，应当只有一个原因。</li>
    <li>开放-封闭原则（OCP）：软件实体(类、模块、函数等)应当为扩展而开放，又为修改而封闭。这个原则有一个相当详细的定义，但是一个简单的意思是：你应当能够改变一个模块的周边环境而无须改变模块本身。</li>
    <li>Liskov替换原则(LSP)：子类型(subtypes)必须是为它们的基类型(base types)可替代的。</li>
    <li>依存关系倒置原则(DIP) ：A．高层模块应当不依赖低层模块，它们应当依赖于抽象。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;B．抽象应当不依赖于细节，细节应当依赖于抽象。<br>更好的描述是：不要依赖那些容易变化的具体类。如果你要继承一个类，从一个抽象类继承吧。如果你要持有一个类的引用，从一个抽象的类引用吧。如果你要调用一个函数，从一个抽象的函数调用吧。</li>
    <li>接口隔离原则（ISP）：客户不应当依赖那些它们根本不用的方法。</li>
</ol>
<p>总结：<br>五个简单的原则是：<br>1、SRP－－一个类应当只有一个发生变化的原因。 <br>2、OCP――应当能够改变一个类的环境，而无须改变类本身。<br>3、LSP――避免造成派生类的方法非法或退化，一个基类的用户应当不需要知道这个派生类。<br>4、DIP ――用依赖于接口和抽象类来替代依赖容易变化的具体类。<br>5、ISP――给一个对象的每一个用户一个接口，这个接口仅有用户需要的方法。<br></p>
<p>&nbsp; </p>
<img src ="http://www.blogjava.net/dayue/aggbug/114789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dayue/" target="_blank">dayue</a> 2007-04-30 15:27 <a href="http://www.blogjava.net/dayue/archive/2007/04/30/114789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之命令（Command）模式 笔记</title><link>http://www.blogjava.net/dayue/archive/2007/04/30/114768.html</link><dc:creator>dayue</dc:creator><author>dayue</author><pubDate>Mon, 30 Apr 2007 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/dayue/archive/2007/04/30/114768.html</guid><wfw:comment>http://www.blogjava.net/dayue/comments/114768.html</wfw:comment><comments>http://www.blogjava.net/dayue/archive/2007/04/30/114768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dayue/comments/commentRss/114768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dayue/services/trackbacks/114768.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令模式是一个行为型模式，允许你创造一个对象的命令然后在需要时候可以执行。当你想创造一个undo/redo，log操作或者在稍晚时候执行命令时这个模式是有用的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个模式里一个命令接口是必需的。对一个命令对象来说，它必须事先实现这个命令的方法。下面是一个简单的命令接口，有一个方法需要实现执行的。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_24_60_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_60_Open_Text.style.display='none'; Codehighlighter1_24_60_Closed_Image.style.display='inline'; Codehighlighter1_24_60_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_60_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_60_Closed_Text.style.display='none'; Codehighlighter1_24_60_Open_Image.style.display='inline'; Codehighlighter1_24_60_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;Command</span><span id=Codehighlighter1_24_60_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_24_60_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;execute();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有被命令的类必须实现这个命令接口。下面是一个简单的命令：当执行时控制台打印"hello world"。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_44_126_Open_Image onclick="this.style.display='none'; Codehighlighter1_44_126_Open_Text.style.display='none'; Codehighlighter1_44_126_Closed_Image.style.display='inline'; Codehighlighter1_44_126_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_44_126_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_44_126_Closed_Text.style.display='none'; Codehighlighter1_44_126_Open_Image.style.display='inline'; Codehighlighter1_44_126_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;HelloCommand&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;Command</span><span id=Codehighlighter1_44_126_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_44_126_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_76_124_Open_Image onclick="this.style.display='none'; Codehighlighter1_76_124_Open_Text.style.display='none'; Codehighlighter1_76_124_Closed_Image.style.display='inline'; Codehighlighter1_76_124_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_76_124_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_124_Closed_Text.style.display='none'; Codehighlighter1_76_124_Open_Image.style.display='inline'; Codehighlighter1_76_124_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;execute()</span><span id=Codehighlighter1_76_124_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_76_124_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可以创建一个HelloCommand的实例然后执行这个方法。
<img src ="http://www.blogjava.net/dayue/aggbug/114768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dayue/" target="_blank">dayue</a> 2007-04-30 14:13 <a href="http://www.blogjava.net/dayue/archive/2007/04/30/114768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之单例（Singleton） 笔记</title><link>http://www.blogjava.net/dayue/archive/2007/04/18/111514.html</link><dc:creator>dayue</dc:creator><author>dayue</author><pubDate>Wed, 18 Apr 2007 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/dayue/archive/2007/04/18/111514.html</guid><wfw:comment>http://www.blogjava.net/dayue/comments/111514.html</wfw:comment><comments>http://www.blogjava.net/dayue/archive/2007/04/18/111514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dayue/comments/commentRss/111514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dayue/services/trackbacks/111514.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>单例模式是最简单的一种设计模式，它是创造型的。一个单例类仅允许他的一个实例被初始化。它检查一个实例是否已经被创建，如果是则返回这个实例。下面是一个单例类的基本结构：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;dp.singleton;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_46_237_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_237_Open_Text.style.display='none'; Codehighlighter1_46_237_Closed_Image.style.display='inline'; Codehighlighter1_46_237_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_46_237_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_237_Closed_Text.style.display='none'; Codehighlighter1_46_237_Open_Image.style.display='inline'; Codehighlighter1_46_237_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Singleton&nbsp;</span><span id=Codehighlighter1_46_237_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_46_237_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Singleton&nbsp;singleton;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_105_111_Open_Image onclick="this.style.display='none'; Codehighlighter1_105_111_Open_Text.style.display='none'; Codehighlighter1_105_111_Closed_Image.style.display='inline'; Codehighlighter1_105_111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_105_111_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_105_111_Closed_Text.style.display='none'; Codehighlighter1_105_111_Open_Image.style.display='inline'; Codehighlighter1_105_111_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Singleton()</span><span id=Codehighlighter1_105_111_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_105_111_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_153_233_Open_Image onclick="this.style.display='none'; Codehighlighter1_153_233_Open_Text.style.display='none'; Codehighlighter1_153_233_Closed_Image.style.display='inline'; Codehighlighter1_153_233_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_153_233_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_153_233_Closed_Text.style.display='none'; Codehighlighter1_153_233_Open_Image.style.display='inline'; Codehighlighter1_153_233_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Singleton&nbsp;getInstance()</span><span id=Codehighlighter1_153_233_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_153_233_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_176_210_Open_Image onclick="this.style.display='none'; Codehighlighter1_176_210_Open_Text.style.display='none'; Codehighlighter1_176_210_Closed_Image.style.display='inline'; Codehighlighter1_176_210_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_176_210_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_210_Closed_Text.style.display='none'; Codehighlighter1_176_210_Open_Image.style.display='inline'; Codehighlighter1_176_210_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(singleton</span><span style="COLOR: #000000">==</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_176_210_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_176_210_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;singleton</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Singleton();<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;singleton;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
</span>在这个类中，有一个private static 的域，构造函数被设为私有的，这样调用它的类就不能使用构造器来创建它的一个实例。从一个单例类中取得一个实例的唯一办法是通过public static getInstance()方法。通过以下方法：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Singleton&nbsp;instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Singleton.getInstance();</span></div>
这个 getInstance()通过测试实例与是否为空来检查这个类的唯一实例是否被创建，如果是空的，则创建一个实例，如果非空，则返回这个已经存在的实例，一旦一个实例被创建了，那么 getInstance()这个方法就返回这个实例。<br><br>另一种稍微有些不同的实现单例类的方法是将域声明改为<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;Singleton&nbsp;singleton</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Singleton();</span></div>
这种方法总是创建一个实例。
<img src ="http://www.blogjava.net/dayue/aggbug/111514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dayue/" target="_blank">dayue</a> 2007-04-18 10:17 <a href="http://www.blogjava.net/dayue/archive/2007/04/18/111514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网上收集的设计模式资料 全部转贴</title><link>http://www.blogjava.net/dayue/archive/2007/04/12/110041.html</link><dc:creator>dayue</dc:creator><author>dayue</author><pubDate>Wed, 11 Apr 2007 19:53:00 GMT</pubDate><guid>http://www.blogjava.net/dayue/archive/2007/04/12/110041.html</guid><wfw:comment>http://www.blogjava.net/dayue/comments/110041.html</wfw:comment><comments>http://www.blogjava.net/dayue/archive/2007/04/12/110041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dayue/comments/commentRss/110041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dayue/services/trackbacks/110041.html</trackback:ping><description><![CDATA[<table class=overflow>
    <tbody>
        <tr>
            <td vAlign=top height=150><span style="COLOR: #00ff00">设计模式(Design Patterns)笔记之一：Abstract Factory</span><br><br>定义：提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。提供创建对象的接。<br><br>工厂模式是我们最常用的模式，是用来创建对象的，它就相当于创建对象的new。<br>例如我们有一个类Example,我们要创建Example的对象:<br><br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Example&nbsp;example</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Example();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>或<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Example&nbsp;example</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Example(参数);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
            <br>如果创建Example时做的事情不是如赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那明显的就违背了面向对象的原则.<br>我们需要将创建实例的责任与使用实例的责任分开, 使得<br><br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Example&nbsp;example</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Example(参数);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
            <br>就是简单的责任:使用Example这个实例;而创建Example的任务就交给了Factory工厂模式.<br><br>按照传统方法，我们如果需要继承Example类，生成MyExample，就需要定义Example为Interface，然后，不断继承这个Interface，生成许多子类，造成以后代码维护是如此的困难。<br><br>如果，我们开始就采用了工厂模式，也许就没有这么多的烦恼了。<br><br>我们生成一个Factory，它专门负责生成Example的实例。<br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_21_207_Open_Image onclick="this.style.display='none'; Codehighlighter1_21_207_Open_Text.style.display='none'; Codehighlighter1_21_207_Closed_Image.style.display='inline'; Codehighlighter1_21_207_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_21_207_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_207_Closed_Text.style.display='none'; Codehighlighter1_21_207_Open_Image.style.display='inline'; Codehighlighter1_21_207_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Factory&nbsp;</span><span id=Codehighlighter1_21_207_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_21_207_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_63_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_63_205_Open_Text.style.display='none'; Codehighlighter1_63_205_Closed_Image.style.display='inline'; Codehighlighter1_63_205_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_63_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_205_Closed_Text.style.display='none'; Codehighlighter1_63_205_Open_Image.style.display='inline'; Codehighlighter1_63_205_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Example&nbsp;getIntance()&nbsp;</span><span id=Codehighlighter1_63_205_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_63_205_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(flag&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyExample();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(flag&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;YourExample();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
            <br>然后，那么在你的程序中,如果要实例化MyExample时.就使用<br><br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Example&nbsp;example</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Factory.getIntance();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">还有其它标志，不具体写了。<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
            <br>具体使用：<br>工厂模式有以下三种：<br>1. 简单工厂(Simple Factory)<br>2. 工厂方法(Factory Method)；<br>3. 抽象工厂(Abstract Factory)。<br><br>我们先看一段代码<br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_29_112_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_112_Open_Text.style.display='none'; Codehighlighter1_29_112_Closed_Image.style.display='inline'; Codehighlighter1_29_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_29_112_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_29_112_Closed_Text.style.display='none'; Codehighlighter1_29_112_Open_Image.style.display='inline'; Codehighlighter1_29_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Factory</span><span id=Codehighlighter1_29_112_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_29_112_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000">&nbsp;MyExample&nbsp;creator();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000">&nbsp;YourExample&nbsp;creator();&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_156_252_Open_Image onclick="this.style.display='none'; Codehighlighter1_156_252_Open_Text.style.display='none'; Codehighlighter1_156_252_Closed_Image.style.display='inline'; Codehighlighter1_156_252_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_156_252_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_156_252_Closed_Text.style.display='none'; Codehighlighter1_156_252_Open_Image.style.display='inline'; Codehighlighter1_156_252_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;FirstFactory&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;Factory</span><span id=Codehighlighter1_156_252_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_156_252_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_186_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_186_202_Open_Text.style.display='none'; Codehighlighter1_186_202_Closed_Image.style.display='inline'; Codehighlighter1_186_202_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_186_202_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_202_Closed_Text.style.display='none'; Codehighlighter1_186_202_Open_Image.style.display='inline'; Codehighlighter1_186_202_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;MyExample&nbsp;creator()</span><span id=Codehighlighter1_186_202_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_186_202_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　　　<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_234_250_Open_Image onclick="this.style.display='none'; Codehighlighter1_234_250_Open_Text.style.display='none'; Codehighlighter1_234_250_Closed_Image.style.display='inline'; Codehighlighter1_234_250_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_234_250_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_250_Closed_Text.style.display='none'; Codehighlighter1_234_250_Open_Image.style.display='inline'; Codehighlighter1_234_250_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;YourExample&nbsp;creator()</span><span id=Codehighlighter1_234_250_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_234_250_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　　　<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_297_393_Open_Image onclick="this.style.display='none'; Codehighlighter1_297_393_Open_Text.style.display='none'; Codehighlighter1_297_393_Closed_Image.style.display='inline'; Codehighlighter1_297_393_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_297_393_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_297_393_Closed_Text.style.display='none'; Codehighlighter1_297_393_Open_Image.style.display='inline'; Codehighlighter1_297_393_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;SecondFactory&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;Factory</span><span id=Codehighlighter1_297_393_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_297_393_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_327_343_Open_Image onclick="this.style.display='none'; Codehighlighter1_327_343_Open_Text.style.display='none'; Codehighlighter1_327_343_Closed_Image.style.display='inline'; Codehighlighter1_327_343_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_327_343_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_327_343_Closed_Text.style.display='none'; Codehighlighter1_327_343_Open_Image.style.display='inline'; Codehighlighter1_327_343_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;MyExample&nbsp;creator()</span><span id=Codehighlighter1_327_343_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_327_343_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　　　<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_375_391_Open_Image onclick="this.style.display='none'; Codehighlighter1_375_391_Open_Text.style.display='none'; Codehighlighter1_375_391_Closed_Image.style.display='inline'; Codehighlighter1_375_391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_375_391_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_375_391_Closed_Text.style.display='none'; Codehighlighter1_375_391_Open_Image.style.display='inline'; Codehighlighter1_375_391_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;YourExample&nbsp;creator()</span><span id=Codehighlighter1_375_391_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_375_391_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>　　　　<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>　　}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
            <br>这里，我们需要创建多个对象，复杂性提高，于是需要采用Abstract Factory来封装共同属性和方法，而将不同的属性和方法通过子类来实现。<br><br>简而言之，工厂模式的目的就是用来实现实例分发。<br><br>工厂模式中几种类型的一些差别：<br>简单工厂模式是根据参数来决定产生实例；<br>简单工厂模式, 核心是一个实类；<br>工厂方法模式的核心是一个抽象工厂类；<br>工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来, 从而可以在实际上成为多个简单工厂模式的综合；<br>工厂方法一般只创建一个实例，而Abstract Factory创建多个实例。<br></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/dayue/aggbug/110041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dayue/" target="_blank">dayue</a> 2007-04-12 03:53 <a href="http://www.blogjava.net/dayue/archive/2007/04/12/110041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>