設計模式(2)-工廠方法模式

定義

將對象的創建委託給工廠,通過傳入不同的參數或class,創建接口的不同實現或抽象類的不同子類.


示例

模擬女媧造人,有三種膚色的人,黃種人,白種人,黑種人.


1.創建人類接口

public interface Human {
    void talk();    //會說話
    void getColor();    //獲取膚色  
}

2.創建人類接口的不同實現類

public class YellowHuman implements Human{
    @Override
    public void talk() {
        System.out.println("說話!!!");
    }

    @Override
    public void getColor() {
        System.out.println("膚色爲黃色!!!");
    }
}
public class WhiteHuman implements Human{
    @Override
    public void talk() {
        System.out.println("說話!!!");
    }

    @Override
    public void getColor() {
        System.out.println("膚色爲白色!!!");
    }
}
public class BlackHuman implements Human{
    @Override
    public void talk() {
        System.out.println("說話!!!");
    }

    @Override
    public void getColor() {
        System.out.println("膚色爲黑色!!!");
    }
}

3.創建工廠

通過反射創建更爲通用的工廠模板,根據傳入實現類clazz的不同,獲得不同的實現類對象.

public class HumanFactory {
    public static <T> T getClassInstance(Class<? extends T> clazz){
        T obj = null;

        try {
            obj = (T) Class.forName(clazz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

4.運行

public static void main(String[] args) {
        YellowHuman yh = HumanFactory.getClassInstance(YellowHuman.class);
        WhiteHuman wh = HumanFactory.getClassInstance(WhiteHuman.class);
        BlackHuman bh = HumanFactory.getClassInstance(BlackHuman.class);

        yh.talk();
        yh.getColor();
        wh.talk();
        wh.getColor();
        bh.talk();
        bh.getColor();
    }

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