夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          面臨問題:
              由于需求的變化,這個(gè)對對象的具體實(shí)現(xiàn)經(jīng)常需要?jiǎng)×易兓?但是它卻擁有著較穩(wěn)定的接口.
          解決辦法:
              如何應(yīng)對這種變化,需要提供一種"封裝機(jī)制"來隔離這種變化,從而保持系統(tǒng)中依賴該對象的對象隨著需求變化而變化.



          簡單工廠模式:
              嚴(yán)格說并不是一個(gè)設(shè)計(jì)模式。簡單工廠沒有抽象類,只有一個(gè)具體工廠類如MyFactory,然后MyFactory里面有個(gè)工廠方法CreateProduct返回一個(gè)基類產(chǎn)品,具體返回什么具體實(shí)例通過傳入?yún)?shù)然后用case判斷。
          簡單工廠模式的組成部份:
             1.產(chǎn)品基類
             2.具體產(chǎn)品
             3.產(chǎn)品工廠 

          簡單工廠各部份的組成關(guān)系

           例子:
          1. 手機(jī)基類
             
          package simpleFactory;

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


          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+"發(fā)短信");
              }
             
          }


          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+"發(fā)短信");
              }
               
          }


          4.手機(jī)工廠
          package simpleFactory;

          /**
           * <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 class PhoneFactory
          {
              
          /**
               * <ul>
               * <li>Description:[生產(chǎn)手機(jī)]</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();
              }

              
          }



          很明顯的缺點(diǎn)就是Nokia每發(fā)明一個(gè)新型號的手機(jī)都需要修改簡單工廠類(增加if判斷),違反了封閉修改,開放擴(kuò)展原則。
          posted on 2011-08-01 22:03 HUIKK 閱讀(246) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 葵青区| 龙山县| 尼玛县| 太原市| 仙桃市| 随州市| 邓州市| 关岭| 砚山县| 伊春市| 南投市| 上高县| 永城市| 汤阴县| 甘泉县| 文山县| 新津县| 安化县| 将乐县| 探索| 乾安县| 崇文区| 杂多县| 麟游县| 万载县| 准格尔旗| 东乡县| 岢岚县| 左贡县| 罗源县| 汉中市| 洞头县| 桂林市| 滨海县| 年辖:市辖区| 蕲春县| 全州县| 永胜县| 博野县| 桐乡市| 安阳市|