﻿<?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-大漠驼铃-随笔分类-Design Pattern</title><link>http://www.blogjava.net/nkjava/category/36698.html</link><description>置身浩瀚的草原，方向最为重要，希望此blog能向大漠驼铃一样，给我方向和指引。</description><language>zh-cn</language><lastBuildDate>Sun, 14 Dec 2008 15:35:48 GMT</lastBuildDate><pubDate>Sun, 14 Dec 2008 15:35:48 GMT</pubDate><ttl>60</ttl><item><title>JAVA设计模式之-简单工厂模式（Simplae Factory）</title><link>http://www.blogjava.net/nkjava/archive/2008/12/14/246282.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sun, 14 Dec 2008 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2008/12/14/246282.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/246282.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2008/12/14/246282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/246282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/246282.html</trackback:ping><description><![CDATA[Factory method(工厂方法)是实例化对象的一种方法的名称。就象工厂一样，Factory
method的任务是创建--或制造--对象。<br />
下面对工厂模式进行简单的讲解：<br />
从音乐盒开始讲起，音乐盒工厂（MusicBoxFactory）生产音乐盒(PianoBox和ViolinBox),当然还可以是其它的音乐盒，这些具体的音乐盒展现给客户（MusicBoxDemo）只是一个界面（IMusicBox），客户不需要知道音乐盒的具体实现功能，只要能play()就OK。<br />
如下图所示：客户(MusicBoxDemo)依赖音乐盒的界面，而不必知道音乐盒是如何通过音乐盒工厂（MusicBoxFactory）生产的。<br />
从下面的图我们进入简单的代码演示阶段：<br />
<img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /><img src="http://www.blogjava.net/images/blogjava_net/nkjava/simpleFactory-1.jpg" alt="" border="0" /><br />
<strong><em>IMusicBox.java</em></strong><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;IMusicBox{<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;play();<br />
<br />
}</span></div>
<strong><em>PianoBox.java<br />
</em></strong>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;PinoBox&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;IMusicBox{<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;play(){<br />
<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">播放钢琴音乐</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
}<br />
}</span></div>
<br />
<em><strong>ViolinBox.java</strong></em><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ViolinBox&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;IMusicBox{<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;play(){<br />
<br />
System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">播放小提琴音乐</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
}<br />
}</span></div>
<em><strong>MusicBoxFactory.java</strong></em><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MusicBoxFactory{<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;">*<br />
使用java反射机制生成实例<br />
客户端只需调用即可<br />
方便维护和以后程序的升级扩展<br />
</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;IMusicBox&nbsp;createMusicBox(String&nbsp;name)</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;InstantiationException,IllegalAccessException,ClassNotFoundException{<br />
<br />
IMusicBox&nbsp;musicbox</span><span style="color: #000000;">=</span><span style="color: #000000;">(IMusicBox)Class.forName(name).newInstance();<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">在这里还可以进行一些box的内部成员变量处理</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;musicbox;<br />
<br />
}<br />
<br />
<br />
}</span></div>
<em><strong>MusicBoxDemo.java<br />
</strong></em>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MusicBoxDemo{<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;&nbsp;Exception{<br />
PlayMusicBox(MusicBoxFactory.createMusicBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">PianoBox</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
);<br />
PlayMusicBox(MusicBoxFactory.createMusicBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">VolinBox</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
);<br />
<br />
<br />
}<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;PlayMusicBox(IMusicBox&nbsp;imusicbox){<br />
<br />
imusicbox.play();<br />
<br />
}<br />
<br />
<br />
<br />
}</span></div>
<br />
这样客户只需要知道音乐的界面即可，不需要知道如何生产的音乐盒。即使以后修改了Factory的生产模式，用户这里也是毫不影响。<br />
<br />
<br />
<img src ="http://www.blogjava.net/nkjava/aggbug/246282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2008-12-14 22:57 <a href="http://www.blogjava.net/nkjava/archive/2008/12/14/246282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>