夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks
          工廠方法模式:
              該模式有一個(gè)抽象基類和若干個(gè)派生的具體工廠類,基類定義了一個(gè)虛工廠方法返回指定產(chǎn)品類的基類,派生類需要實(shí)現(xiàn)該虛方法并創(chuàng)建具體產(chǎn)品類返回。注意工廠方法的每個(gè)具體工廠只負(fù)責(zé)返回一種產(chǎn)品類。
              工廠和產(chǎn)品是一種一一對(duì)應(yīng)的平行的關(guān)系.
               GOF對(duì)工廠方法模式的概擴(kuò)是:定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,使一個(gè)類的實(shí)例化沿遲到其子類中.
          工廠方法的組成部份:
              1.產(chǎn)品基類
              2.具體產(chǎn)品
              3.工廠基類
              4.具體工廠基類
          工廠方法組成部份之間的關(guān)系:
             
          例子:
          手機(jī)基類:
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[Phone]</li>
           * <li>Description: [手機(jī)抽象類]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public abstract class Phone
          {
              
          /** 手機(jī)型號(hào) */
              
          public String model;
              
              
          /**
               *<ul>
               *<li>Description:[構(gòu)造方法]</li>
               *<ul>
               * 
          @param model
               
          */

              
          public Phone(String model)
              
          {
                  
          this.model = model;
              }

              
              
          /**
               * <ul>
               * <li>Description:[打電話]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void call();
              
              
          /**
               * <ul>
               * <li>Description:[聽電話]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void answer();
              
              
          /**
               * <ul>
               * <li>Description:[發(fā)信息]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void sendMsg();
              
              
          /**
               * <ul>
               * <li>Description:[收信息]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void receiveMsg();
          }


          手機(jī)5233
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[Nokia5233]</li>
           * <li>Description: [諾基亞5233]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Nokia5233 extends Phone
          {

              
          public Nokia5233()
              
          {
                  
          super("5233");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#answer()
               
          */

              
          public void answer()
              
          {
                  System.out.println(
          this.model+"接聽電話");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#call()
               
          */

              
          public void call()
              
          {
                  System.out.println(
          this.model+"打電話");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#receiveMsg()
               
          */

              
          public void receiveMsg()
              
          {
                  System.out.println(
          this.model+"收短信");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#sendMsg()
               
          */

              
          public void sendMsg()
              
          {
                  System.out.println(
          this.model+"發(fā)短信");
              }
             
          }



          手機(jī)5235
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[Nokia5235]</li>
           * <li>Description: [諾基亞5235]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Nokia5235  extends Phone
          {

              
          public Nokia5235()
              
          {
                  
          super("5235");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#answer()
               
          */

              
          public void answer()
              
          {
                  System.out.println(
          this.model+"接聽電話");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#call()
               
          */

              
          public void call()
              
          {
                  System.out.println(
          this.model+"打電話");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#receiveMsg()
               
          */

              
          public void receiveMsg()
              
          {
                  System.out.println(
          this.model+"收短信");
              }


              
          /* (non-Javadoc)
               * @see simpleFactory.Phone#sendMsg()
               
          */

              
          public void sendMsg()
              
          {
                  System.out.println(
          this.model+"發(fā)短信");
              }
               
          }


          工廠基類
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[PhoneFactory]</li>
           * <li>Description: [手機(jī)工廠]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public abstract class PhoneFactory
          {   
              
          /**
               * <ul>
               * <li>Description:[創(chuàng)建手機(jī)]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @return
               
          */

              
          public abstract Phone createPhone();
          }


          5233工廠
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[Nokia5233Factory]</li>
           * <li>Description: [諾基亞5233工廠]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Nokia5233Factory extends PhoneFactory
          {

              
          /* (non-Javadoc)
               * @see methodFactory.PhoneFactory#createPhone()
               
          */

              
          public Phone createPhone()
              
          {
                  
          return new Nokia5233();
              }
             

          }


          5235工廠
          package methodFactory;

          public class Nokia5235Factory extends PhoneFactory
          {

              
          /* (non-Javadoc)
               * @see methodFactory.PhoneFactory#createPhone()
               
          */

              
          public Phone createPhone()
              
          {
                  
          return new Nokia5235();
              }
           
          }



          測試類
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[測試類]</li>
           * <li>Description: [type of functional description]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-1]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Test
          {
              
              
          /**
               * <ul>
               * <li>Description:[method of functional description]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @param args
               
          */

              
          public static void main(String[] args)
              
          {
                  Phone phone 
          = new Nokia5233Factory().createPhone();
                  phone.call();
                  
                  phone 
          = new Nokia5235Factory().createPhone();
                  
                  phone.receiveMsg();
              }

              
          }

          優(yōu)點(diǎn):
          使用工廠方法可以讓用戶的代碼和某一個(gè)特定類的了類的代碼解耦.
          工廠方法使用戶不必知道它所使用的對(duì)象是如何被創(chuàng)建出來的,只需要知道該對(duì)象有哪些方法.
          posted on 2011-08-01 23:10 HUIKK 閱讀(293) 評(píng)論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 越西县| 萨嘎县| 江安县| 九台市| 太谷县| 会同县| 长治市| 大埔县| 广灵县| 中方县| 广河县| 布尔津县| 手游| 晋中市| 浙江省| 新龙县| 拉孜县| 本溪| 墨脱县| 湘潭市| 泰宁县| 朔州市| 会宁县| 永城市| 龙州县| 勃利县| 黔西县| 额济纳旗| 彩票| 德清县| 白银市| 阜新市| 昌宁县| 额济纳旗| 应城市| 陆川县| 永胜县| 林周县| 斗六市| 铁岭市| 通辽市|