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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

    跟屌絲大哥學(xué)習(xí)設(shè)計(jì)模式-抽象工廠模式

    1.3 抽象工廠(Abstract Factory)模式
        抽象工廠模式可以向客戶端提供一個(gè)接口,使得客戶端在不必指定產(chǎn)品具體類型的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。這就是抽象工廠模式的用意。
        每個(gè)模式都是針對(duì)一定問題的解決方案。抽象工廠模式面對(duì)的問題是多產(chǎn)品等級(jí)結(jié)構(gòu)的系統(tǒng)設(shè)計(jì)。
        在學(xué)習(xí)抽象工廠具體實(shí)例之前,應(yīng)該明白兩個(gè)重要的概念:產(chǎn)品族和產(chǎn)品等級(jí)。
        產(chǎn)品族:是指位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中,功能相關(guān)聯(lián)的產(chǎn)品組成的家族。比如AMD的CPU和ADM芯片的主板,組成一個(gè)家族。Intel的CPU和 Intel芯片的主板,又組成一個(gè)家族。而這兩個(gè)家族都來自于兩個(gè)產(chǎn)品等級(jí):CPU,主板。一個(gè)等級(jí)結(jié)構(gòu)是由相同的結(jié)構(gòu)的產(chǎn)品組成,示意圖如下:




        理解這個(gè)產(chǎn)品結(jié)構(gòu)是理解抽象工廠模式的關(guān)鍵所在,所以我不惜花費(fèi)時(shí)間來畫此圖。如果領(lǐng)悟不到此圖的含義,就無(wú)法區(qū)分工廠方法模式和抽象工廠模式的區(qū)別。
        從上圖可以看出,抽象工廠模式的每個(gè)工廠創(chuàng)造出來的都是一族產(chǎn)品,而不是一個(gè)或者一組。組是可以隨意組合的!其實(shí)兩個(gè)就這點(diǎn)點(diǎn)差別,呵呵,估計(jì)現(xiàn)在你已經(jīng)差不多明白了抽象工廠模式的含義。不廢話了,看個(gè)例子,真相將大白于天下!
    1.3.1 抽象工廠模式在農(nóng)場(chǎng)中的實(shí)現(xiàn)

    1.3.1.1 背景

        聰明的農(nóng)場(chǎng)主總是讓自己的莊園越來越有價(jià)值,“農(nóng)場(chǎng)”在經(jīng)歷了簡(jiǎn)單工廠模式和工廠模式后,不斷的擴(kuò)大生產(chǎn)。如今,再次面臨新的大發(fā)展,一項(xiàng)重要的工作就是 引進(jìn)塑料大棚技術(shù),在大棚里種植熱帶(Tropical)和亞熱帶(Northern)的水果和蔬菜,用以滿足市場(chǎng)需求,獲取更大的利益。

    1.3.1.2 產(chǎn)品角色圖

        經(jīng)過分析,對(duì)產(chǎn)品角色進(jìn)行分析得出下圖


        經(jīng)過分析,所謂的各個(gè)園丁其實(shí)就是工廠角色,而蔬菜和水果則是產(chǎn)品角色。將抽象工廠模式用于農(nóng)場(chǎng)中,系統(tǒng)設(shè)計(jì)圖如下:



    1.3.1.4.1 抽象工廠:Gardener.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:Gardener.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:55:23
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  抽象工廠角色:工廠接口
     */
    public interface Gardener {
        public Fruit createFruit(String name);
    1.3.1.4.2 抽象水果產(chǎn)品:Fruit.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:Fruit.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:54:15
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  抽象產(chǎn)品角色:水果接口
     */
    public interface Fruit {
    }
    1.3.1.4.3 抽象蔬菜產(chǎn)品:Veggie.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:Veggie.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:56:22
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  抽象產(chǎn)品角色:蔬菜接口
     */
    public interface Veggie {
    }
    1.3.1.4.4 熱帶水果:TropicalFruit.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:TropicalFruit.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:57:08
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體產(chǎn)品角色:熱帶水果
     */
    public class TropicalFruit implements Fruit {
        private String name;
    }
    1.3.1.4.5 熱帶蔬菜:TropicalVeggie.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:TropicalVeggie.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:58:03
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體產(chǎn)品角色:熱帶蔬菜
     */
    public class TropicalVeggie implements Veggie {
        private String name;
        public TropicalVeggie(String name) {
            System.out.println("熱帶工廠為您創(chuàng)建了:熱帶水果-"+name);
        }
    }
    1.3.1.4.6 亞熱帶水果:NorthernFruit.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:NorthernFruit.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:58:55
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體產(chǎn)品角色:亞熱帶水果
     */
    public class NorthernFruit implements Fruit {
        private String name;
        public NorthernFruit(String name) {
            System.out.println("亞熱帶工廠為您創(chuàng)建了:亞熱帶水果-"+name);
        }
    }

    1.3.1.4.7 亞熱帶蔬菜:NorthernVeggie.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:NorthernVeggie.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    22:59:36
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體產(chǎn)品角色:亞熱帶蔬菜
     */
    public class NorthernVeggie implements Veggie {
        private String name;
        public NorthernVeggie(String name) {
            System.out.println("亞熱帶工廠為您創(chuàng)建了:亞熱帶蔬菜-"+name);
        }
    }
    1.3.1.4.8 熱帶工廠:TropicalGardener.java
    /**
     * Created by IntelliJ IDEA.
     * FileName:TropicalGardener.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    23:01:49
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體工廠角色:熱帶工廠
     */
    public class TropicalGardener implements Gardener {
        public Fruit createFruit(String name) {
            return new TropicalFruit(name);
        }
        public Veggie createVeggie(String name) {
            return new TropicalVeggie(name);
        }
    }
    1.3.1.4.9 亞熱帶工廠:NorthernGardener.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:NorthernGardener.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    23:00:31
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  具體工廠角色:亞熱帶工廠
     */
    public class NorthernGardener implements Gardener {
        public Fruit createFruit(String name) {
            return new NorthernFruit(name);
        }
        public Veggie createVeggie(String name) {
            return new NorthernVeggie(name);
        }
    }
    1.3.1.4.10 測(cè)試類(客戶端):TestApp.java
    package com.lavasoft.patterns.abstractfactory.ybms;
    /**
     * Created by IntelliJ IDEA.
     * FileName:TestApp.java
     * User:    LavaSoft
     * Date:    2006-12-5
     * Time:    23:03:22
     * 《Java與模式》(--閻宏博士著)讀書筆記
     * 工廠模式--抽象工廠模式--一般性模式(農(nóng)場(chǎng)應(yīng)用)
     * ReadMe:  測(cè)試類(客戶端)
     */
    public class TestApp {
        private void test(){
            Veggie tv,nv;
            Fruit tf,nf;
            TropicalGardener tg=new TropicalGardener();
            NorthernGardener ng=new NorthernGardener();
            tv=tg.createVeggie("熱帶菜葉");
            nv=ng.createVeggie("東北甜菜");
            tf=tg.createFruit("海南椰子");
            nf=ng.createFruit("雪梨");
        }
        public static void main(String args[]){
            TestApp test=new TestApp();
            test.test();
        }
    }
    1.3.1.4.11 測(cè)試運(yùn)行結(jié)果
        熱帶工廠為您創(chuàng)建了:熱帶水果-熱帶菜葉
        亞熱帶工廠為您創(chuàng)建了:亞熱帶蔬菜-東北甜菜
        熱帶工廠為您創(chuàng)建了:熱帶水果-海南椰子
        亞熱帶工廠為您創(chuàng)建了:亞熱帶水果-雪梨
        Process finished with exit code 0
        看完設(shè)計(jì)圖和源碼,原理已經(jīng)很清楚了,這個(gè)模式應(yīng)用很靈活,猴交給你了,看你怎么玩它!哈哈哈哈。。。。
    1.3.1.5 女媧舉繩造萬(wàn)物
        女媧舉繩造物的故事很適合在這里舉例子,女媧的繩子按照陰陽(yáng)劃分,產(chǎn)品則按人、獸劃分。將抽象工廠模式用于女媧造萬(wàn)物的模擬系統(tǒng)設(shè)計(jì)中。系統(tǒng)設(shè)計(jì)圖如下:

    posted on 2012-12-21 16:26 順其自然EVO 閱讀(684) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式學(xué)習(xí)

    <2012年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 四虎国产精品免费视| 人妻免费一区二区三区最新| 99在线视频免费观看视频 | 亚洲中文字幕一二三四区苍井空| 无码精品一区二区三区免费视频| 亚洲国产精品无码久久SM| 中文字幕版免费电影网站| 亚洲成a人片在线观看无码专区| 99精品免费视品| 亚洲va在线va天堂va四虎| 18成禁人视频免费网站| 亚洲伊人久久大香线蕉在观| 久久久www成人免费毛片| 亚洲av无码成人精品国产| 免费亚洲视频在线观看| 大妹子影视剧在线观看全集免费| 亚洲国产精品乱码一区二区| 久久伊人免费视频| 亚洲三级视频在线观看| 日韩精品视频免费观看| v片免费在线观看| 亚洲久本草在线中文字幕| 91麻豆最新在线人成免费观看| 亚洲人av高清无码| 亚洲最大av无码网址| 午夜无码A级毛片免费视频 | 亚洲欧洲一区二区| 岛国av无码免费无禁网站| 色偷偷亚洲第一综合| 亚洲老妈激情一区二区三区| 91九色老熟女免费资源站| 亚洲精品美女久久7777777| 亚洲国产精品一区二区九九| 99re在线免费视频| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲国产精品人人做人人爽| 久9久9精品免费观看| 国产av无码专区亚洲av毛片搜| 国产精品亚洲成在人线| 四虎成人免费影院网址| 西西人体免费视频|