類型:創建模式
提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。
實現代碼
新建抽象工廠接口:
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();
}
}
工廠方法模式:
一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。
區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。