簡單工廠模式
定義:又叫做靜態工廠方法模式,通過定義專門一個類來負責創建
其他類的實例,而被創建的其他類實例一般具有共同的父類。
角色:分別爲:工廠角色、抽象角色和具體實例角色。
通過對每個類實例的抽象,抽象出共同的父類(通常以接口的形式創建),作爲抽象角色。然後再工廠角色中,根據傳遞的參數,創建具體類實例。
下面以具體的代碼進行講解:
首先來看下具體類:
例如:
public class Apple{
public void get(){
System.out.println("Apple");
}
}
public class Banana{
public void get(){
System.out.println("Banana");
}
}
上面定義了兩個具體類分爲蘋果類和香蕉類。可以看到他們都有get方法,因此可以定義一個水果接口類,作爲抽象角色。
類如:
public interface Fruit {
public void get();
}
下面修改下上面的具體類,使他們實現該抽象接口。
public class Apple implements Fruit{
public void get(){
System.out.println("Apple");
}
}
public class Banana implements Fruit{
public void get(){
System.out.println("Banana");
}
}
現在已經有了抽象角色和具體實例角色,還差工廠角色。那該如何創建工廠角色呢。請看下面的代碼:
public class FruitFactory {
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {
if(type.equalsIgnoreCase("apple")) {
return Apple.class.newInstance();
} else if(type.equalsIgnoreCase("banana")) {
return Banana.class.newInstance();
} else {
System.out.println("找不到相應的實例化類");
return null;
}
}
}
那麼,該如何調用呢,請看代碼:
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Fruit apple = FruitFactory.getFruit("Apple");
Fruit banana = FruitFactory.getFruit("Banana");
apple.get();
banana.get();
}
}
上面介紹了簡單工廠模式。但是工廠角色中創建實例的代碼比較繁瑣,我們可以更改爲更爲簡單的方式,如下:
public class FruitFactory {
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Class fruit = Class.forName(type);
return (Fruit) fruit.newInstance();
}
}
上面的代碼雖然簡潔,但是要注意調用的時候,參數要與具體類名一致。