夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          工廠方法模式:
              該模式有一個抽象基類和若干個派生的具體工廠類,基類定義了一個虛工廠方法返回指定產品類的基類,派生類需要實現該虛方法并創建具體產品類返回。注意工廠方法的每個具體工廠只負責返回一種產品類。
              工廠和產品是一種一一對應的平行的關系.
               GOF對工廠方法模式的概擴是:定義一個創建對象的接口,讓子類決定實例化哪一個類,使一個類的實例化沿遲到其子類中.
          工廠方法的組成部份:
              1.產品基類
              2.具體產品
              3.工廠基類
              4.具體工廠基類
          工廠方法組成部份之間的關系:
             
          例子:
          手機基類:
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[Phone]</li>
           * <li>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 abstract class Phone
          {
              
          /** 手機型號 */
              
          public String model;
              
              
          /**
               *<ul>
               *<li>Description:[構造方法]</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:[發信息]</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();
          }


          手機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+"發短信");
              }
             
          }



          手機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+"發短信");
              }
               
          }


          工廠基類
          package methodFactory;

          /**
           * <ul>
           * <li>Title:[PhoneFactory]</li>
           * <li>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 abstract class PhoneFactory
          {   
              
          /**
               * <ul>
               * <li>Description:[創建手機]</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();
              }

              
          }

          優點:
          使用工廠方法可以讓用戶的代碼和某一個特定類的了類的代碼解耦.
          工廠方法使用戶不必知道它所使用的對象是如何被創建出來的,只需要知道該對象有哪些方法.
          posted on 2011-08-01 23:10 HUIKK 閱讀(293) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 博罗县| 定陶县| 宜州市| 克拉玛依市| 陆河县| 阿克| 长葛市| 长岭县| 绵竹市| 乌拉特后旗| 遵义县| 大同县| 阿荣旗| 平定县| 东丰县| 辽源市| 区。| 易门县| 大渡口区| 德保县| 高青县| 灌南县| 景谷| 三台县| 灯塔市| 都兰县| 赤壁市| 怀仁县| 洱源县| 明光市| 观塘区| 二连浩特市| 麦盖提县| 阳山县| 民丰县| 牙克石市| 宣恩县| 平江县| 东源县| 双柏县| 永登县|