工廠方法模式就是通過一個工廠來創建對象,工廠方法模式分爲三種,普通工廠模式,多個工廠方法模式,靜態工廠方法模式
一 丶普通工廠模式
普通工廠模式,就是建立一個工廠類,對實現了同一接口的一些類進行實例的創建。
/**
* 聲明一個跑的接口
* @author Vip_HYP
*/
public interface Run{
public void run();
}
創建兩個實現類
/**
* 創建兩個實現類,女孩跑
*/
public class GridRun implements Run{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("女孩在跑步");
}
}
/**
* 創建兩個實現類,男孩跑
*/
public class BoyRun implements Run{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("男孩在跑步");
}
}
最後創建一個工廠類
/**
* 最後創建一個工廠類
*/
public class RunFactory{
public Run createRun(String arg0){
if(arg0.equals("grid")){
return new GridRun();
}
if(arg0.equals("boy")){
return new BoyRun();
}
else{
return null;
}
}
}
測試:
public static void main(String[] args) {
RunFactory factory = new RunFactory();
Run run= factory.createRun("grid");
run.run(); //輸出 女孩在跑步
}
二 丶多個工廠方法模式
是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創建對象,而多個工廠方法模式是提供多個工廠方法,分別創建對象。
修改普通工廠模式的工廠類:
/**
* 最後創建一個工廠類
*/
public class RunFactory{
public Run createGridRun(){
return new GridRun();
}
public Run createBoyRun(){
return new BoyRun();
}
}
測試:
public static void main(String[] args) {
RunFactory factory = new RunFactory();
Run run = factory.createBoyRun();
run.run();//輸出 男孩在跑步
}
三 丶靜態工廠方法模式
將上面的多個工廠方法模式裏的方法置爲靜態的,不需要創建實例,直接調用即可。
測試:
public static void main(String[] args) {
Run run = RunFactory.createBoyRun();
run.run();//輸出 男孩在跑步
}
總結,工廠模式適合:凡是出現了大量的產品需要創建,並且具有共同的接口時,可以通過工廠方法模式進行創建。在以上的三種模式中,第一種如果傳入的字符串有誤,不能正確創建對象,第三種相對於第二種,不需要實例化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。