【工廠方法模式應(yīng)用場景舉例】
比如在玩“極品飛車”這款游戲,暈了吧,我喜歡極品飛車:),在玩這款游戲時,游戲者可以選擇從不同品牌來選擇賽車,那么這個“品牌”其實也就是工廠,每個工廠生產(chǎn)的賽車都不一樣,這就是典型的工廠方法的應(yīng)用場景。
【工廠方法模式解釋】
類型:創(chuàng)建模式
定義一個用于創(chuàng)建對象的接口,讓其子類來決定實例化哪一個類(產(chǎn)品),工廠方法使一個類的創(chuàng)建延遲到其子類中。
【工廠方法模式UML圖】

【工廠方法模式-JAVA代碼實現(xiàn)】
新建賽車的接口:
通過使用工廠方法模式就可以將對象的創(chuàng)建延遲到子類進行實例化,而且每個工廠創(chuàng)建不同的品牌的汽車,每個汽車的功能都有自己“專利”的實現(xiàn),這樣可以將不同“品牌”的“汽車”的創(chuàng)建進行分類,有利于對象創(chuàng)建的清晰性。創(chuàng)建不同的汽車只需要改動這句代碼就可以了:
Icar_factory car_factory = new audi_car_factory_imple();
比如在玩“極品飛車”這款游戲,暈了吧,我喜歡極品飛車:),在玩這款游戲時,游戲者可以選擇從不同品牌來選擇賽車,那么這個“品牌”其實也就是工廠,每個工廠生產(chǎn)的賽車都不一樣,這就是典型的工廠方法的應(yīng)用場景。
【工廠方法模式解釋】
類型:創(chuàng)建模式
定義一個用于創(chuàng)建對象的接口,讓其子類來決定實例化哪一個類(產(chǎn)品),工廠方法使一個類的創(chuàng)建延遲到其子類中。
【工廠方法模式UML圖】

【工廠方法模式-JAVA代碼實現(xiàn)】
新建賽車的接口:
package car_interface;
public interface Icar_interface {
public void start();
public void stop();
}
public interface Icar_interface {
public void start();
public void stop();
}
新建1個汽車信息的基類:
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
}
}
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
}
}
新建奧迪汽車實現(xiàn)類:
package car_imple;
import car_interface.Icar_interface;
public class car_audi_imple extends base_car_imple {
public void start() {
System.out.println(this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
+ this.getSpeed());
}
public void stop() {
System.out.println(this.getName() + " 車以專利技術(shù)停車了");
}
}
import car_interface.Icar_interface;
public class car_audi_imple extends base_car_imple {
public void start() {
System.out.println(this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
+ this.getSpeed());
}
public void stop() {
System.out.println(this.getName() + " 車以專利技術(shù)停車了");
}
}
新建大眾汽車實現(xiàn)類:
package car_imple;
import car_interface.Icar_interface;
public class car_3w_imple extends base_car_imple {
public void start() {
System.out.println(this.getName() + " 車以專利技術(shù)起動了 最高速度為:"
+ this.getSpeed());
}
public void stop() {
System.out.println(this.getName() + " 車以專利技術(shù)停車了");
}
}
import car_interface.Icar_interface;
public class car_3w_imple 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_factory_interface;
import car_interface.Icar_interface;
public interface Icar_factory {
public Icar_interface create_car();
}
import car_interface.Icar_interface;
public interface Icar_factory {
public Icar_interface create_car();
}
新建一個創(chuàng)建奧迪車的汽車工廠實現(xiàn)類:
package car_factory_imple;
import car_factory_interface.Icar_factory;
import car_imple.car_audi_imple;
import car_interface.Icar_interface;
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;
}
}
import car_factory_interface.Icar_factory;
import car_imple.car_audi_imple;
import car_interface.Icar_interface;
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;
}
}
新建一個創(chuàng)建大眾車的汽車工廠實現(xiàn)類:
package car_factory_imple;
import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple;
import car_imple.car_audi_imple;
import car_interface.Icar_interface;
public class threeW_car_factory_imple implements Icar_factory {
public Icar_interface create_car() {
car_3w_imple car_3w_imple_ref = new car_3w_imple();
car_3w_imple_ref.setName("大眾A6");
car_3w_imple_ref.setSpeed(400);
return car_3w_imple_ref;
}
}
import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple;
import car_imple.car_audi_imple;
import car_interface.Icar_interface;
public class threeW_car_factory_imple implements Icar_factory {
public Icar_interface create_car() {
car_3w_imple car_3w_imple_ref = new car_3w_imple();
car_3w_imple_ref.setName("大眾A6");
car_3w_imple_ref.setSpeed(400);
return car_3w_imple_ref;
}
}
客戶端運行程序代碼:
package run_main;
import car_factory_imple.audi_car_factory_imple;
import car_factory_interface.Icar_factory;
import car_interface.Icar_interface;
public class run_main {
public static void main(String[] args) {
Icar_factory car_factory = new audi_car_factory_imple();
Icar_interface car_ref = car_factory.create_car();
car_ref.start();
car_ref.stop();
}
}
import car_factory_imple.audi_car_factory_imple;
import car_factory_interface.Icar_factory;
import car_interface.Icar_interface;
public class run_main {
public static void main(String[] args) {
Icar_factory car_factory = new audi_car_factory_imple();
Icar_interface car_ref = car_factory.create_car();
car_ref.start();
car_ref.stop();
}
}
程序運行結(jié)果如下:
奧迪A6 車以專利技術(shù)起動了 最高速度為:300
奧迪A6 車以專利技術(shù)停車了
奧迪A6 車以專利技術(shù)停車了
通過使用工廠方法模式就可以將對象的創(chuàng)建延遲到子類進行實例化,而且每個工廠創(chuàng)建不同的品牌的汽車,每個汽車的功能都有自己“專利”的實現(xiàn),這樣可以將不同“品牌”的“汽車”的創(chuàng)建進行分類,有利于對象創(chuàng)建的清晰性。創(chuàng)建不同的汽車只需要改動這句代碼就可以了:
Icar_factory car_factory = new audi_car_factory_imple();