一 簡單工廠模式

簡單工廠模式

定義:又叫做靜態工廠方法模式,通過定義專門一個類來負責創建
其他類的實例,而被創建的其他類實例一般具有共同的父類。

角色:分別爲:工廠角色、抽象角色和具體實例角色。

通過對每個類實例的抽象,抽象出共同的父類(通常以接口的形式創建),作爲抽象角色。然後再工廠角色中,根據傳遞的參數,創建具體類實例。

下面以具體的代碼進行講解:
首先來看下具體類:
例如:

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

上面的代碼雖然簡潔,但是要注意調用的時候,參數要與具體類名一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章