聽風(fēng)的歌

          欣賞永運(yùn)比跟風(fēng)好

          ◎Design Pattern: Abstract Factory 模式

          我們平日走在步人街上都能看到很多專賣店,服裝、珠寶等等;
          拿服裝專賣店來說,一個(gè)專賣店里面肯定有好幾個(gè)品牌的服裝,比如Giordano、Baleno,這些品牌都是不同公司生產(chǎn)的。
          沒人見個(gè)專賣店自己生產(chǎn)服裝的吧,專賣店需要某個(gè)品牌的服裝時(shí),就去聯(lián)系相應(yīng)的廠家供貨即可,具體的生產(chǎn)是由廠家去完成。
          抽象工廠模式也是如此,抽象工廠提供多個(gè)抽象方法,由具體的子工廠去實(shí)現(xiàn)。
          現(xiàn)在我想開一家服裝店,經(jīng)營(yíng)上衣和短褲,至于具體什么品牌的等選門面在裝修之時(shí)再定。
          interface ISpecialityShop {
             Shirt createShirt();
             Pants createPants();
          }

          好了,現(xiàn)在門面選好且已裝修完畢,具體經(jīng)營(yíng)什么品牌也早想好,就佐丹奴和班尼路吧。
          開始聯(lián)系廠家,廠家要能生產(chǎn)Shirt和Pants,而且要有生產(chǎn)Giordano、Baleno這兩個(gè)品牌。

          我們都知道服裝都有一些共同的特征,每件衣服都有所屬的品牌、每條短褲都有一個(gè)尺碼。

          interface Shirt {
             
          // 品牌
             String getBrand();
          }

          interface Pants {
             
          // 尺寸
             double getSize(); 
          }

          佐丹奴的衣服自然會(huì)印上Giordano字樣的標(biāo)志

          class GiordanoTShirt implements Shirt {
             
          public String getBrand() {
                 
          return "Giordano";
             }
          }

          class GiordanoPants implements Pants {
             
          public double getSize() {
                 
          return 31;
             }
          }

          班尼路的也不例外,加上自己的品牌標(biāo)志

          class BalenoTShirt implements Shirt {
             
          public String getBrand() {
                 
          return "Baleno";
             }
          }

          class BalenoPants implements Pants {
             
          public double getSize() {
                 
          return 29;
             }
          }


          運(yùn)氣不錯(cuò),很快就找到了廠家。

          // 生產(chǎn)Giordano上衣和短褲的工廠

          class GiordanoFactory implements ISpecialityShop {
             Shirt createShirt() {
                
          return new GiordanoTShirt();
             }
             
             Pants createPants() {
                
          return new GiordanoPants();
             }
          }

          // 生產(chǎn)Baleno上衣和短褲的工廠
          class BalenoFactory implements ISpecialityShop {
             Shirt createShirt() {
                
          return new BalenoTShirt();
             }
             
             Pants createPants() {
                
          return new BanlenoPants();
             }
          }


          廠家開始供貨,開業(yè)大吉,哈哈。

          public class TestAbstractFactory extends TestCase {
           
          public static void main(String[] args) {
            TestRunner.run(TestAbstractFactory.
          class);
           }

           
          public void testFac() {
            setShop(
          new GiordanoFactory());
            IShirt shirt 
          = shopFactory.createShirt();
            shirt.getBrand();
            IPants pants 
          = shopFactory.createPants();
            pants.getSize();
            
            setShop(
          new BalenoFactory());
            shirt 
          = shopFactory.createShirt();
            shirt.getBrand();
            pants 
          = shopFactory.createPants();
            pants.getSize();
           }
           
           
          private void setShop(ISpecialityShop factory) {
            shopFactory 
          = factory;
           }

           
          protected void setUp() throws Exception {
            
           }

           
          protected void tearDown() throws Exception {
            shopFactory 
          = null;  
           }
           
          private ISpecialityShop shopFactory;
          }


          以后想多經(jīng)營(yíng)幾個(gè)品牌,只需直接去找了廠家供貨即可。


          最后,為了充分理解抽象工廠模式,畫出它的UML圖是很有必要的。




          posted on 2007-04-19 15:24 聽風(fēng)的歌 閱讀(369) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 华宁县| 兰西县| 上栗县| 若尔盖县| 天等县| 枣庄市| 富蕴县| 谷城县| 玉屏| 七台河市| 九龙县| 玉溪市| 龙里县| 宁强县| 怀柔区| 柳林县| 孙吴县| 土默特右旗| 始兴县| 廉江市| 清流县| 安达市| 司法| 黎平县| 息烽县| 绥芬河市| 衡山县| 桦川县| 板桥市| 彭州市| 资溪县| 甘洛县| 奉贤区| 双辽市| 仁怀市| 盈江县| 石景山区| 宁安市| 麻栗坡县| 玉屏| 利津县|