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

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

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

    Never give up!

    如果說軟件開發是一條布滿荊棘的坎坷之路,那么我會每天在這道路兩旁書上“火焰舞者,到此一游!”。

     

    工廠方法模式

    工廠模式相當于創建實例對象的new,我們經常要根據類Class生成實例對象,如A a=new A() 。工廠模式也是用來創建實例對象的,所以new時就要多個心眼,是否可以考慮實用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴展性和盡量少的修改量。設想一個場景:一個肉鋪老板賣肉,因為剛開張生意冷清,也就先賣下豬肉吧。
    類圖如下:

    原先我們可能會在客戶端直接調用比如Pig asiaPig = new AsiaPig()之類的代碼,但現在我們只需調用PigFactory.createPig(***)來達到對Pig實現類的創建,這樣客戶端程序中超類的代碼和子類對象的創建代碼解藕了。
    public class PigFactory {

        @SuppressWarnings(
    "unchecked")
        
    public static Pig createPig(String pigName) {
            
    if ("AsiaPig".equals(pigName)) {
                
    return new AsiaPig();
            } 
    else if ("AfricanPig".equals(pigName)) {
                
    return new AfricanPig();
            } 
    else {
                
    return null;
            }
        }
    }

    public class PorkStore {

        
    private static void sendPork(String pigName) {
            Pig africanPig 
    = PigFactory.createPig(pigName);
            africanPig.send();
            
        }
        
         
    public static void main(String[] args) {
             sendPork(
    "AsiaPig");
             sendPork(
    "AfricanPig");
        }
    }

    這樣做的另一個問題又出來了,隨著if else的增多代碼塊變的越趨龐大,這時就可利用java的發射來進行改善了,調整如下:
    package factoryMethod;

    public class PigFactory {

        @SuppressWarnings(
    "unchecked")
        
    public static Pig createPig(String pigNme) {
            
    try {
                Class animalClass 
    = Class.forName(pigNme);
                
                
    return (Pig)animalClass.newInstance();
            } 
    catch (ClassNotFoundException e) {
                
    throw new RuntimeException("caught exception while found the class", e);
            } 
    catch (InstantiationException e) {
                
    throw new RuntimeException("caught exception while instantiation", e);
            } 
    catch (IllegalAccessException e) {
                
    throw new RuntimeException(e);
            }
        }
    }

    public class PorkStore {

        
    private static void sendPork(String pigName) {
            Pig africanPig 
    = PigFactory.createPig(pigName);
            africanPig.send();
            
        }
        
         
    public static void main(String[] args) {
             sendPork(
    "factoryMethod.AsiaPig");
             sendPork(
    "factoryMethod.AfricanPig");
        }
    }

    共廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個,讓類把實例化推遲到子類

    posted on 2009-02-28 07:38 永遠的火焰舞者 閱讀(195) 評論(0)  編輯  收藏 所屬分類: designing pattern


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(10)

    隨筆檔案(9)

    文章檔案(1)

    搜索

    最新評論

    • 1.?re: JForum安裝
    • 我就是想研究下sso,哈哈!再在JForum的基礎上二次開發玩玩 呵呵
    • --Jlg
    • 2.?re: JForum安裝
    • JForum的代碼還比較清晰,但談不上強大,雖然一般也足夠用了。
    • --一農

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看一级做a爰片久久| 成人福利免费视频| 亚洲天堂在线视频| 成人精品综合免费视频| 亚洲v国产v天堂a无码久久| 特级毛片爽www免费版| 久久久久亚洲爆乳少妇无| 国产免费人成视频在线播放播 | 最近中文字幕无吗免费高清 | 亚洲成av人片天堂网| 两个人的视频www免费| 亚洲成AV人在线观看天堂无码| 国产在线精品免费aaa片| 久久亚洲成a人片| 我们的2018在线观看免费高清| 亚洲人成网男女大片在线播放| 破了亲妺妺的处免费视频国产| 青草青草视频2免费观看| 最新亚洲成av人免费看| 好紧我太爽了视频免费国产| 亚洲视频中文字幕在线| 成年人在线免费观看| 三年片在线观看免费观看大全中国| 国产啪亚洲国产精品无码| 久久国产乱子伦精品免费不卡| 亚洲成人黄色网址| 精品少妇人妻AV免费久久洗澡| 四虎影视在线看免费观看| 亚洲国产人成网站在线电影动漫| 亚洲网站免费观看| 偷自拍亚洲视频在线观看99| 亚洲色欲久久久综合网| 国产精品久久永久免费| 国产亚洲精彩视频| 亚洲国产成人久久综合一| 精品久久久久久久免费人妻 | 亚洲熟妇成人精品一区| 亚洲综合激情另类专区| 在线看片免费人成视久网| 国产成人精品久久亚洲高清不卡| 亚洲熟妇色自偷自拍另类|