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

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

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

    Never give up!

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

     

    工廠方法模式

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

    原先我們可能會在客戶端直接調(diào)用比如Pig asiaPig = new AsiaPig()之類的代碼,但現(xiàn)在我們只需調(diào)用PigFactory.createPig(***)來達到對Pig實現(xiàn)類的創(chuàng)建,這樣客戶端程序中超類的代碼和子類對象的創(chuàng)建代碼解藕了。
    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的發(fā)射來進行改善了,調(diào)整如下:
    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");
        }
    }

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

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


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


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆分類(10)

    隨筆檔案(9)

    文章檔案(1)

    搜索

    最新評論

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

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲色婷婷久久99精品91| 亚洲国产av一区二区三区丶| 久久久久久久久久国产精品免费| 亚洲色大成网站www永久| 毛片a级毛片免费播放下载| 男女猛烈无遮掩视频免费软件| 亚洲精品成人无码中文毛片不卡| 青娱分类视频精品免费2| 特级毛片A级毛片免费播放| 亚洲AV乱码一区二区三区林ゆな| 无码免费午夜福利片在线| 国产黄色片免费看| 亚洲国产精品张柏芝在线观看| 免费大黄网站在线看| 麻豆视频免费播放| 国产性生大片免费观看性| 亚洲无码一区二区三区| 久久亚洲免费视频| 国产一区二区三区免费看| 曰批视频免费30分钟成人| 9久热精品免费观看视频| 亚洲乱色伦图片区小说| 亚洲尹人九九大色香蕉网站| 亚洲成网777777国产精品| 国产成人免费网站| 久久精品免费一区二区三区| 色屁屁www影院免费观看视频| jlzzjlzz亚洲jzjzjz| 久久精品亚洲中文字幕无码网站 | 亚洲视频在线一区二区三区| 亚洲国产香蕉人人爽成AV片久久| 成人福利免费视频| 国内精品久久久久影院免费| 美女羞羞视频免费网站| 亚洲中文字幕无码亚洲成A人片| 亚洲AV乱码久久精品蜜桃| 中文字幕亚洲一区| 亚洲国产电影av在线网址| 日本人的色道www免费一区| 国产精品爱啪在线线免费观看| 天堂在线免费观看|