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

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

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

    隨筆-199  評論-203  文章-11  trackbacks-0
     【抽象工廠模式應(yīng)用場景舉例

      寫到抽象工廠模式了,我深知“抽象工廠模式”博文會帶來一點點高潮,因為程序員對工廠模式中的“抽象工廠”都是比較感冒的,而且關(guān)注也很多,我就盡量用我所能理解的那么點程度來給大家介紹這個模式,如果有更好的比喻還請網(wǎng)友指正,先感謝了!

      設(shè)計模式-快餐簡解-【工廠方法模式】

        介紹了工廠方法的使用,從那個程序中可以看到,奧迪audi車是從audi_car_factory_imple工廠中創(chuàng)建出來的,而大眾3W車是從threeW_car_factory_imple工廠中創(chuàng)建出來的,那么如果這2家汽車生產(chǎn)大廠由總部在北京市,現(xiàn)在發(fā)展到上海,深圳等城市創(chuàng)建生氣汽車的分廠,該怎么辦?是不是得將原來的奧迪汽車工廠類:

    public class audi_car_factory_imple implements Icar_factory {

        
    public Icar_interface create_car() {

            car_audi_imple car_audi_imple_ref 
    = new car_audi_imple();
            car_audi_imple_ref.setName(
    "奧迪A6");
            car_audi_imple_ref.setSpeed(
    300);

            
    return car_audi_imple_ref;
        }
    }

        改成類似如下的模樣:

    public class audi_car_factory_imple implements Icar_factory {

        
    public Icar_interface create_car(String area_car) {

    if (area_car.equals("北京")){創(chuàng)建一個北京的奧迪汽車}

    if (area_car.equals("上海")){創(chuàng)建一個上海的奧迪汽車}

    if (area_car.equals("深圳")){創(chuàng)建一個深圳的奧迪汽車}

            
    return car_audi_imple_ref;
        }
    }

        那么發(fā)現(xiàn)一個問題,不同地域的汽車卻在一個工廠中出現(xiàn),這是不合乎常理的,因為北京奧迪在北京分廠創(chuàng)建,上海奧迪在上海分廠創(chuàng)建,這樣才對。

        所以如果遇到分“大系”來創(chuàng)建對象的時候,抽象工廠方法是肯定要使用的時候了。這里的大系指的就是從地域上來分。

        這個例子就應(yīng)該以“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創(chuàng)建對象”

        比如在玩“極品飛車”這款游戲,每個地圖處都有造車的工廠,每個造車的工廠都因為有造車的檔次不同而劃分為高級車廠,低級車廠,那么這樣的場景正是應(yīng)用抽象工廠的好時機(jī),再來理解一下這句話“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創(chuàng)建對象”,用抽象造車工廠來定義具體造車工廠的抽象,而由具體的造車工廠來創(chuàng)建汽車,這就是抽象工廠與工廠方法的不同,工廠方法中對象的創(chuàng)建是由工廠方法來確定的,創(chuàng)建的對象都是不分類并且實現(xiàn)一個接口的,而抽象工廠就是在工廠方法的基礎(chǔ)上對創(chuàng)建車的對象的行為進(jìn)行分類,比如北京車廠,上海車廠等。

    抽象工廠模式解釋

        類型:創(chuàng)建模式

        提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定他們具體的類。

        【抽象工廠模式UML圖

        【抽象工廠模式-JAVA代碼實現(xiàn)

        新建抽象工廠接口:

    package car_factory_interface;

    import car_interface.Icar_interface;

    public interface Icar_factory {

        
    public Icar_interface create_threeW_car();

        
    public Icar_interface create_audi_car();

    }

        新建抽象工廠接口的高級車adv工廠實現(xiàn)類:

    package car_factory_imple;

    import car_factory_interface.Icar_factory;
    import car_imple.car_3w_imple_adv;
    import car_imple.car_audi_imple_adv;
    import car_interface.Icar_interface;

    public class car_factory_adv implements Icar_factory {

        
    public Icar_interface create_audi_car() {

            car_audi_imple_adv car_audi_imple_adv 
    = new car_audi_imple_adv();
            car_audi_imple_adv.setName(
    "奧迪A6");
            car_audi_imple_adv.setSpeed(
    300);

            
    return car_audi_imple_adv;
        }

        
    public Icar_interface create_threeW_car() {
            
            car_3w_imple_adv car_3w_imple_adv_ref 
    = new car_3w_imple_adv();
            car_3w_imple_adv_ref.setName(
    "大眾A6");
            car_3w_imple_adv_ref.setSpeed(
    300);

            
    return car_3w_imple_adv_ref;
        }

    }

     新建抽象工廠接口的普通車low工廠實現(xiàn)類:

    package car_factory_imple;

    import car_factory_interface.Icar_factory;
    import car_imple.car_3w_imple_low;
    import car_imple.car_audi_imple_low;
    import car_interface.Icar_interface;

    public class car_factory_low implements Icar_factory {

        
    public Icar_interface create_audi_car() {

            car_audi_imple_low car_audi_imple_low_ref 
    = new car_audi_imple_low();
            car_audi_imple_low_ref.setName(
    "奧迪A6");
            car_audi_imple_low_ref.setSpeed(
    300);

            
    return car_audi_imple_low_ref;
        }

        
    public Icar_interface create_threeW_car() {
            
            car_3w_imple_low car_3w_imple_low_ref 
    = new car_3w_imple_low();
            car_3w_imple_low_ref.setName(
    "大眾A6");
            car_3w_imple_low_ref.setSpeed(
    300);

            
    return car_3w_imple_low_ref;
        }

    }

        上面已經(jīng)有抽象工廠和具體工廠的實現(xiàn)類了。

        新建汽車接口:

    package car_interface;

    public interface Icar_interface {

        
    public void start();

        
    public void stop();

    }

        新建汽車父類:

    package car_imple;

    import car_interface.Icar_interface;

    public class base_car_imple implements Icar_interface {

        
    private int speed;

        
    private String name;

        
    public int getSpeed() {
            
    return speed;
        }

        
    public void setSpeed(int speed) {
            
    this.speed = speed;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public void start() {
            
    // TODO Auto-generated method stub

        }

        
    public void stop() {
            
    // TODO Auto-generated method stub

        }

    }

      新建大眾高級車:

    package car_imple;

    import car_interface.Icar_interface;

    public class car_3w_imple_adv extends base_car_imple {

        
    public void start() {
            System.out.println(
    "富華版:" + this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
                    
    + this.getSpeed());
        }

        
    public void stop() {
            System.out.println(
    "富華版:" + this.getName() + " 車以專利技術(shù)停車了");
        }

    }

        新建大眾普通車:

    package car_imple;

    import car_interface.Icar_interface;

    public class car_3w_imple_low extends base_car_imple {

        
    public void start() {
            System.out.println(
    "普通版:" + this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
                    
    + this.getSpeed());
        }

        
    public void stop() {
            System.out.println(
    "普通版:" + this.getName() + " 車以專利技術(shù)停車了");
        }

    }

        新建大眾普通車:

    package car_imple;

    import car_interface.Icar_interface;

    public class car_audi_imple_adv extends base_car_imple {

        
    public void start() {
            System.out.println(
    "富華版:" + this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
                    
    + this.getSpeed());
        }

        
    public void stop() {
            System.out.println(
    "富華版:" + this.getName() + " 車以專利技術(shù)停車了");
        }

    }

      新建奧迪普通車:

    package car_imple;

    import car_interface.Icar_interface;

    public class car_audi_imple_low extends base_car_imple {

        
    public void start() {
            System.out.println(
    "普通版:" + this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
                    
    + this.getSpeed());
        }

        
    public void stop() {
            System.out.println(
    "普通版:" + this.getName() + " 車以專利技術(shù)停車了");
        }

    }

        新建客戶端運(yùn)行類:

    package run_main;

    import car_factory_imple.car_factory_adv;
    import car_factory_interface.Icar_factory;
    import car_interface.Icar_interface;

    public class run_main {

        
    public static void main(String[] args) {

            Icar_factory Icar_factory_ref 
    = new car_factory_adv();

            Icar_interface Icar_interface_ref 
    = Icar_factory_ref
                    .create_threeW_car();
            Icar_interface_ref.start();
            Icar_interface_ref.stop();

            
        }
    }

        程序運(yùn)行結(jié)果如下:

    富華版:大眾A6 車以專利技術(shù)起動了 最高速度為:300
    富華版:大眾A6 車以專利技術(shù)停車了

        抓一篇閻宏的小文字:

    一開始只在后花園中種蔬菜類的時候可以用簡單工廠模式,由工廠負(fù)責(zé)生成具體的蔬菜類,

    但是如果后花園要引進(jìn)水果類的時候簡單模式就行不通了,因此需要使用工廠方法模式,將產(chǎn)品類族分開。

    但是如果后花園的規(guī)模繼續(xù)擴(kuò)大到地域范圍的分割時,比如說一個在北京,一個在上海的時候,工廠方法模式就不夠了,因為對兩個后花園來說,每個后花園的植物是要被種在一起的,并且兩個后花園用工廠方法模式是無法體現(xiàn)其區(qū)別的

        從程序中可以看到,工廠是抽象的,工廠的實現(xiàn)是不樣的,不同的工廠創(chuàng)建出不同汽車。而工廠方法僅僅是用一個工廠去創(chuàng)建很多汽車。
      【抽象工廠模式-MyEclipse6項目JAVA代碼實現(xiàn)

        抽象工廠模式abstract_factory示例代碼:點擊/Files/Werther/abstract_factory.rar
        原文地址:http://java.chinaitlab.com/model/769176.html

    posted on 2009-04-09 08:04 Werther 閱讀(567) 評論(0)  編輯  收藏 所屬分類: 10.Java
    主站蜘蛛池模板: 亚洲人成影院在线观看| 亚洲欧洲AV无码专区| 亚洲精品电影天堂网| 337p日本欧洲亚洲大胆人人| 成全视频免费观看在线看| 好爽…又高潮了毛片免费看| 日日噜噜噜噜夜夜爽亚洲精品| 国产精品亚洲专区在线观看| 久久免费香蕉视频| 女人被弄到高潮的免费视频 | 五月亭亭免费高清在线| 亚洲精品无码99在线观看| 国产成人亚洲精品| 嫩草视频在线免费观看| 亚洲av日韩av永久在线观看 | 国产1024精品视频专区免费 | 自拍偷自拍亚洲精品第1页| 一区二区三区无码视频免费福利| 亚洲av无码一区二区三区四区| 九九九精品成人免费视频| 亚洲第一福利视频| 国产精品成人啪精品视频免费| 女人被男人躁的女爽免费视频| 亚洲av色香蕉一区二区三区蜜桃| www亚洲精品少妇裸乳一区二区| 亚洲欧美日韩综合俺去了| 国产成人精品男人免费| 亚洲av乱码一区二区三区香蕉| 91精品免费观看| 久久久影院亚洲精品| 1000部拍拍拍18免费网站| 亚洲色一区二区三区四区| 成人毛片18女人毛片免费视频未| 亚洲视频在线观看不卡| 久久久精品免费视频| 日韩精品视频免费观看| 色拍自拍亚洲综合图区| 日本免费人成视频在线观看| 亚洲激情在线观看| 99视频在线看观免费| 亚洲大尺度无码无码专线一区|