設計模式學習----抽象工廠模式

類型:創建模式

 

提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。

 

實現代碼

 

新建抽象工廠接口:

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工廠實現類:

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工廠實現類:

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;
    }

}


上面已經有抽象工廠和具體工廠的實現類了。


新建汽車接口:

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() + " 車以專利技術起動了 最高速度爲:"
                + this.getSpeed());
    }

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

}


新建大衆普通車:

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() + " 車以專利技術起動了 最高速度爲:"
                + this.getSpeed());
    }

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

}


新建大衆普通車:

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() + " 車以專利技術起動了 最高速度爲:"
                + this.getSpeed());
    }

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

}

新建奧迪普通車:

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() + " 車以專利技術起動了 最高速度爲:"
                + this.getSpeed());
    }

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

}


新建客戶端運行類:

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();

       
    }
}

 

工廠方法模式:

一個抽象產品類,可以派生出多個具體產品類。  

一個抽象工廠類,可以派生出多個具體工廠類。  

每個具體工廠類只能創建一個具體產品類的實例。

 

抽象工廠模式:

多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。  

一個抽象工廠類,可以派生出多個具體工廠類。  

每個具體工廠類可以創建多個具體產品類的實例。  

   

區別:

工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。  

工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。

 

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章