夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          面臨問題:
              由于需求的變化,這個對對象的具體實現經常需要劇烈變化,但是它卻擁有著較穩定的接口.
          解決辦法:
              如何應對這種變化,需要提供一種"封裝機制"來隔離這種變化,從而保持系統中依賴該對象的對象隨著需求變化而變化.



          簡單工廠模式:
              嚴格說并不是一個設計模式。簡單工廠沒有抽象類,只有一個具體工廠類如MyFactory,然后MyFactory里面有個工廠方法CreateProduct返回一個基類產品,具體返回什么具體實例通過傳入參數然后用case判斷。
          簡單工廠模式的組成部份:
             1.產品基類
             2.具體產品
             3.產品工廠 

          簡單工廠各部份的組成關系

           例子:
          1. 手機基類
             
          package simpleFactory;

          /**
           * <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();
          }


          2. nokia5233
          package simpleFactory;

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


          3. nokia5235
          package simpleFactory;

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


          4.手機工廠
          package simpleFactory;

          /**
           * <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 class PhoneFactory
          {
              
          /**
               * <ul>
               * <li>Description:[生產手機]</li>
               * <li>Created by [Huyvanpull] [2011-8-1]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @param model
               * 
          @return
               
          */

              
          public static Phone createPhone(String model)
              
          {
                  
          if ("5233".endsWith(model))
                  
          {
                      
          return new Nokia5233();
                  }

                  
          else if ("5235".endsWith(model))
                  
          {
                      
          return new Nokia5235();
                  }

                  
          return null;
              }

          }



          5.測試類
          package simpleFactory;

          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 
          = PhoneFactory.createPhone("5233");
                  phone.call();
                  
                  phone 
          = PhoneFactory.createPhone("5235");
                  phone.receiveMsg();
              }

              
          }



          很明顯的缺點就是Nokia每發明一個新型號的手機都需要修改簡單工廠類(增加if判斷),違反了封閉修改,開放擴展原則。
          posted on 2011-08-01 22:03 HUIKK 閱讀(246) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 墨竹工卡县| 金阳县| 交口县| 浮山县| 北辰区| 合阳县| 五莲县| 义马市| 凤庆县| 朝阳县| 滨州市| 平南县| 大石桥市| 浙江省| 监利县| 敦煌市| 平阳县| 浦城县| 新建县| 新沂市| 喀喇沁旗| 鱼台县| 佛山市| 桑植县| 正安县| 安阳市| 太仓市| 武清区| 北海市| 韶山市| 平阴县| 绥棱县| 洱源县| 鱼台县| 司法| 钟祥市| 固安县| 招远市| 揭西县| 台湾省| 顺义区|