設計模式之抽象工廠方法

如果看了前兩篇文章,這個設計模式一樣很簡單,上代碼

/**
 * 抽象工廠方法
 * 在工廠方法的基礎上,每個工廠實例裏不止一個接口方法,而是多個
 * 這樣做體現了產品簇的意義,將相關的產品放在同一個工廠裏
 */
public class Main {

    public static void main(String[] args) {

        IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
        ICat blackCat = blackAnimalFactory.createCat();
        blackCat.eat();
        IDog blackDog = blackAnimalFactory.createDog();
        blackDog.eat();

        IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
        ICat whiteCat = whiteAnimalFactory.createCat();
        whiteCat.eat();
        IDog whiteDog = whiteAnimalFactory.createDog();
        whiteDog.eat();

    }

}

public interface ICat {
    void eat();
}

public interface IDog {
    void eat();
}

public class BlackCat implements ICat {
    public void eat() {
        System.out.println("The black cat is eating!");
    }
}

public class BlackDog implements IDog {
    public void eat() {
        System.out.println("The black dog is eating!");
    }
}

public class WhiteCat implements ICat {
    public void eat() {
        System.out.println("The white cat is eating!");
    }
}

public class WhiteDog implements IDog {
    public void eat() {
        System.out.println("The white dog is eating!");
    }
}

public interface IAnimalFactory {

    ICat createCat();

    IDog createDog();
}

public class BlackAnimalFactory implements IAnimalFactory {

    @Override
    public ICat createCat() {
        return new BlackCat();
    }

    @Override
    public IDog createDog() {
        return new BlackDog();
    }
}

public class WhiteAnimalFactory implements IAnimalFactory {

    @Override
    public ICat createCat() {
        return new WhiteCat();
    }

    @Override
    public IDog createDog() {
        return new WhiteDog();
    }

}

用法:
工廠方法裏每個工廠就生產一個產品,擴展一下,生產多個產品,這就是抽象工廠了,這裏也就是涉及了一個產品簇的概念了。
換一個工廠就換一整套實現,一整套實現替換的代碼場景太多了,仔細想想是不是這麼回事,如果想不到的慢慢想,總有想通的時候。
另外說一句,設計模式裏大量用到了接口,很多初學者看的一頭霧水,其實設計模式總歸一句話,如何使用接口,over!!!

發佈了32 篇原創文章 · 獲贊 3 · 訪問量 7691
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章