3-工廠模式 - 創建型模式


參考:設計模式之禪

1. 例子

在這裏插入圖片描述
人類接口:

public interface Human {
    void getColor();
    void talk();
}

各個人種:

public class YellowHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("YellowHuman is yellow");
    }

    @Override
    public void talk() {
        System.out.println("YellowHuman talk");
    }
}

public class WhiteHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("WhiteHuman is white");
    }

    @Override
    public void talk() {
        System.out.println("WhiteHuman talk");
    }
}
public class BlackHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("BlackHuman is black");
    }

    @Override
    public void talk() {
        System.out.println("BlackHuman talk");
    }
}

工廠:

public abstract class AbstractHumanFactory {
    public abstract <T extends Human> T createHuman(Class<T> c);
}
public class HumanFactory extends AbstractHumanFactory {

    @Override
    public <T extends Human> T createHuman(Class<T> c) {
        T instance = null;
        try {
            instance = (T) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            System.out.println("創建人類失敗");
        }
        return instance;
    }
}

女媧造人:

public class NvWa {
    public static void main(String[] args) {
        HumanFactory humanFactory = new HumanFactory();
        YellowHuman yellowHuman = humanFactory.createHuman(YellowHuman.class);
        WhiteHuman whiteHuman = humanFactory.createHuman(WhiteHuman.class);
        BlackHuman blackHuman = humanFactory.createHuman(BlackHuman.class);
        yellowHuman.getColor();
        yellowHuman.talk();
        whiteHuman.getColor();
        whiteHuman.talk();
        blackHuman.getColor();
        blackHuman.talk();
    }
}

2. 定義和特點

定義一個創建對象的接口,讓子類決定實例化哪個類。工廠方法使得類的實例化延遲到子類。

有以下特點:

  • 良好的封裝性,代碼結構清晰,調用者只需知道產品的類名或其他字符串就可以創建產品對象,不需要了解產品的創建過程;
  • 擴展性優秀,可以擴展產品,像上面就可以增加棕色人種;

符合以下三個原則;

  • 迪米特原則,工廠模式不需要對產品瞭解;
  • 依賴倒置原則,只依賴產品的接口或者抽象類;
  • 里氏替換原則,創建產品的方法參數是接口或抽象類。

3. 工廠模式的擴展

3.1 簡單工廠模式

也叫靜態工廠模式。
在這裏插入圖片描述

3.2 升級爲多個工廠模式

在這裏插入圖片描述

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