<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>梦幻酷酷</title>
    <description></description>
    <link>http://shcuo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>抽象工厂模式</title>
        <author>梦幻酷酷</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shcuo.javaeye.com">梦幻酷酷</a>&nbsp;
          链接：<a href="http://shcuo.javaeye.com/blog/195364" style="color:red;">http://shcuo.javaeye.com/blog/195364</a>&nbsp;
          发表时间: 2008年05月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3></h3>
<div class="blog_content">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抽象工厂模式特别适合于这样的一种产品结构：产品分为几个系列，在每个系列中，产品的布局都是要同的，在一个系列中某个位置的产品，在另一个系列中一定有一个对应的产品。<br />这样的产品结构是存在的，这几个系列中同一位置的产品可能是互斥的，它们是针对不同客户的解决方案，每个客户都只择其一。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比如Linux与Windows系统下的界面控件，可以从两个交叉的角度来看，从组件的角度看，可以分为linux的组件和windows的组件；从系统的角度看，可以分为Text组件或其它组件。<img class="magplus" title="点击查看原始大小图片" src="http://p.blog.csdn.net/images/p_blog_csdn_net/fyzhao/sf.JPG" height="195" alt="" width="700" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text和Button就是不同的产品系列，客户要么是Windows，要么是Linux，客户的选择都会出现在各产品系列的同一位置。<br />以下是示例代码：
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; word-break: break-all; padding-top: 4px; border: windowtext 0.5pt solid;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_52_55_Open_Image" onclick="this.style.display='none'; document.getElementById('_52_55_Open_Text').style.display='none'; document.getElementById('_52_55_Closed_Image').style.display='inline'; document.getElementById('_52_55_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_52_55_Closed_Image" onclick="this.style.display='none'; document.getElementById('_52_55_Closed_Text').style.display='none'; document.getElementById('_52_55_Open_Image').style.display='inline'; document.getElementById('_52_55_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ProductA&nbsp;</span><span id="_52_55_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_52_55_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_128_131_Open_Image" onclick="this.style.display='none'; document.getElementById('_128_131_Open_Text').style.display='none'; document.getElementById('_128_131_Closed_Image').style.display='inline'; document.getElementById('_128_131_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_128_131_Closed_Image" onclick="this.style.display='none'; document.getElementById('_128_131_Closed_Text').style.display='none'; document.getElementById('_128_131_Open_Image').style.display='inline'; document.getElementById('_128_131_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ProductA1&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;ProductA&nbsp;</span><span id="_128_131_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_128_131_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_204_207_Open_Image" onclick="this.style.display='none'; document.getElementById('_204_207_Open_Text').style.display='none'; document.getElementById('_204_207_Closed_Image').style.display='inline'; document.getElementById('_204_207_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_204_207_Closed_Image" onclick="this.style.display='none'; document.getElementById('_204_207_Closed_Text').style.display='none'; document.getElementById('_204_207_Open_Image').style.display='inline'; document.getElementById('_204_207_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ProductA2&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;ProductA&nbsp;</span><span id="_204_207_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_204_207_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_263_266_Open_Image" onclick="this.style.display='none'; document.getElementById('_263_266_Open_Text').style.display='none'; document.getElementById('_263_266_Closed_Image').style.display='inline'; document.getElementById('_263_266_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_263_266_Closed_Image" onclick="this.style.display='none'; document.getElementById('_263_266_Closed_Text').style.display='none'; document.getElementById('_263_266_Open_Image').style.display='inline'; document.getElementById('_263_266_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;ProductB&nbsp;</span><span id="_263_266_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_263_266_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_339_342_Open_Image" onclick="this.style.display='none'; document.getElementById('_339_342_Open_Text').style.display='none'; document.getElementById('_339_342_Closed_Image').style.display='inline'; document.getElementById('_339_342_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_339_342_Closed_Image" onclick="this.style.display='none'; document.getElementById('_339_342_Closed_Text').style.display='none'; document.getElementById('_339_342_Open_Image').style.display='inline'; document.getElementById('_339_342_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ProductB1&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;ProductB&nbsp;</span><span id="_339_342_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_339_342_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_415_418_Open_Image" onclick="this.style.display='none'; document.getElementById('_415_418_Open_Text').style.display='none'; document.getElementById('_415_418_Closed_Image').style.display='inline'; document.getElementById('_415_418_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_415_418_Closed_Image" onclick="this.style.display='none'; document.getElementById('_415_418_Closed_Text').style.display='none'; document.getElementById('_415_418_Open_Image').style.display='inline'; document.getElementById('_415_418_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ProductB2&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;ProductB&nbsp;</span><span id="_415_418_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_415_418_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_473_538_Open_Image" onclick="this.style.display='none'; document.getElementById('_473_538_Open_Text').style.display='none'; document.getElementById('_473_538_Closed_Image').style.display='inline'; document.getElementById('_473_538_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_473_538_Closed_Image" onclick="this.style.display='none'; document.getElementById('_473_538_Closed_Text').style.display='none'; document.getElementById('_473_538_Open_Image').style.display='inline'; document.getElementById('_473_538_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;Creator&nbsp;</span><span id="_473_538_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_473_538_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductA&nbsp;factoryA();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductB&nbsp;factoryB();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_609_732_Open_Image" onclick="this.style.display='none'; document.getElementById('_609_732_Open_Text').style.display='none'; document.getElementById('_609_732_Closed_Image').style.display='inline'; document.getElementById('_609_732_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_609_732_Closed_Image" onclick="this.style.display='none'; document.getElementById('_609_732_Closed_Text').style.display='none'; document.getElementById('_609_732_Open_Image').style.display='inline'; document.getElementById('_609_732_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Creator1&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;Creator&nbsp;</span><span id="_609_732_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_609_732_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_640_669_Open_Image" onclick="this.style.display='none'; document.getElementById('_640_669_Open_Text').style.display='none'; document.getElementById('_640_669_Closed_Image').style.display='inline'; document.getElementById('_640_669_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_640_669_Closed_Image" onclick="this.style.display='none'; document.getElementById('_640_669_Closed_Text').style.display='none'; document.getElementById('_640_669_Open_Image').style.display='inline'; document.getElementById('_640_669_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductA&nbsp;factoryA()&nbsp;</span><span id="_640_669_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_640_669_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&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;ProductA1();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_700_729_Open_Image" onclick="this.style.display='none'; document.getElementById('_700_729_Open_Text').style.display='none'; document.getElementById('_700_729_Closed_Image').style.display='inline'; document.getElementById('_700_729_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_700_729_Closed_Image" onclick="this.style.display='none'; document.getElementById('_700_729_Closed_Text').style.display='none'; document.getElementById('_700_729_Open_Image').style.display='inline'; document.getElementById('_700_729_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductB&nbsp;factoryB()&nbsp;</span><span id="_700_729_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_700_729_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&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;ProductB1();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_803_926_Open_Image" onclick="this.style.display='none'; document.getElementById('_803_926_Open_Text').style.display='none'; document.getElementById('_803_926_Closed_Image').style.display='inline'; document.getElementById('_803_926_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_803_926_Closed_Image" onclick="this.style.display='none'; document.getElementById('_803_926_Closed_Text').style.display='none'; document.getElementById('_803_926_Open_Image').style.display='inline'; document.getElementById('_803_926_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Creator2&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;Creator&nbsp;</span><span id="_803_926_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_803_926_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_834_863_Open_Image" onclick="this.style.display='none'; document.getElementById('_834_863_Open_Text').style.display='none'; document.getElementById('_834_863_Closed_Image').style.display='inline'; document.getElementById('_834_863_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_834_863_Closed_Image" onclick="this.style.display='none'; document.getElementById('_834_863_Closed_Text').style.display='none'; document.getElementById('_834_863_Open_Image').style.display='inline'; document.getElementById('_834_863_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductA&nbsp;factoryA()&nbsp;</span><span id="_834_863_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_834_863_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&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;ProductA2();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_894_923_Open_Image" onclick="this.style.display='none'; document.getElementById('_894_923_Open_Text').style.display='none'; document.getElementById('_894_923_Closed_Image').style.display='inline'; document.getElementById('_894_923_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_894_923_Closed_Image" onclick="this.style.display='none'; document.getElementById('_894_923_Closed_Text').style.display='none'; document.getElementById('_894_923_Open_Image').style.display='inline'; document.getElementById('_894_923_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProductB&nbsp;factoryB()&nbsp;</span><span id="_894_923_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_894_923_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&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;ProductB2();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;abstractfactory;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_976_1244_Open_Image" onclick="this.style.display='none'; document.getElementById('_976_1244_Open_Text').style.display='none'; document.getElementById('_976_1244_Closed_Image').style.display='inline'; document.getElementById('_976_1244_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_976_1244_Closed_Image" onclick="this.style.display='none'; document.getElementById('_976_1244_Closed_Text').style.display='none'; document.getElementById('_976_1244_Open_Image').style.display='inline'; document.getElementById('_976_1244_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Client&nbsp;</span><span id="_976_1244_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_976_1244_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ProductA&nbsp;pa;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ProductB&nbsp;pb;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_1050_1241_Open_Image" onclick="this.style.display='none'; document.getElementById('_1050_1241_Open_Text').style.display='none'; document.getElementById('_1050_1241_Closed_Image').style.display='inline'; document.getElementById('_1050_1241_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_1050_1241_Closed_Image" onclick="this.style.display='none'; document.getElementById('_1050_1241_Closed_Text').style.display='none'; document.getElementById('_1050_1241_Open_Image').style.display='inline'; document.getElementById('_1050_1241_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />&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;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="_1050_1241_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_1050_1241_Open_Text"><span style="color: #000000;">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;client&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Client();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creator1&nbsp;c1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Creator1();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.pa&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c1.factoryA();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.pb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c1.factoryB();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(client.pa);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(client.pb);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000;"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://shcuo.javaeye.com/blog/195364#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 May 2008 17:29:55 +0800</pubDate>
        <link>http://shcuo.javaeye.com/blog/195364</link>
        <guid>http://shcuo.javaeye.com/blog/195364</guid>
      </item>
  </channel>
</rss>