<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    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 閱讀(250) 評論(0)  編輯  收藏 所屬分類: Design Patterns
    主站蜘蛛池模板: 国产伦一区二区三区免费 | 亚洲av无码一区二区三区天堂| 久久精品国产精品亚洲人人 | 久久精品国产亚洲综合色| 国产成人精品免费视频大全五级| 亚洲最大免费视频网| 色www永久免费| 人人公开免费超级碰碰碰视频| 亚洲欧洲无码一区二区三区| 亚洲字幕在线观看| 亚洲成人精品久久| 亚洲精品无码不卡在线播放HE| 永久免费视频v片www| 久久精品无码一区二区三区免费| 又大又硬又爽又粗又快的视频免费| 99re8这里有精品热视频免费| 黄网站在线播放视频免费观看| 亚洲欧洲无卡二区视頻| 亚洲欧洲另类春色校园网站| 亚洲大香伊人蕉在人依线| 亚洲精品白色在线发布| 7777久久亚洲中文字幕蜜桃| 久久综合图区亚洲综合图区| 亚洲精品夜夜夜妓女网| 亚洲Av综合色区无码专区桃色| 国产亚洲人成A在线V网站| 国产成人精品久久亚洲| 亚洲中文字幕视频国产| 国产成人精品久久亚洲| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产精品亚洲mnbav网站| 在线观看午夜亚洲一区| 亚洲日韩精品一区二区三区| 国产亚洲av片在线观看播放 | 最近新韩国日本免费观看| 91人人区免费区人人| 亚洲啪啪免费视频| 国产1024精品视频专区免费| 无限动漫网在线观看免费| 四虎影院在线免费播放| 免费一级毛片不卡在线播放|