三 抽象工廠模式

抽象工廠模式

定義:

抽象工廠模式可以向客戶端提供一個接口,使得客戶端在不必指定類實例的具體類型的情況下,能夠創建多個類實例族的類實例對象。

例如:以上一章節的例子爲例。假如Apple又分爲Apple1和Apple2,Banana也分爲Banana1和Banana2。我們希望對每類水果的每種類型區分, 並可以創建多個水果實例。此時,便可以考慮抽象工廠模式,即:對類實例進一步抽象,對每一種類實例族進行創建。

抽象工廠角色:

public interface FruitFactory {
    //實例化Apple
    public Fruit getApple();
    //實例化Banana
    public Fruit getBanana();
}

抽象角色

其中包括公共的抽象角色和具體類的進一步抽象。

public interface Fruit {
    public void get();
}
public abstract class Apple implements Fruit{
    public abstract void get();
}
public abstract class Banana implements Fruit{
    public abstract void get();
}

具體工廠角色

public class Fruit1Factory implements FruitFactory {
    public Fruit getApple() {
        return new Apple1();
    }

    public Fruit getBanana() {
        return new Banana1();
    }
}
public class Fruit2Factory implements FruitFactory {
    public Fruit getApple() {
        return new Apple2();
    }

    public Fruit getBanana() {
        return new Banana2();
    }
}

具體類實例

public class Apple1 extends Apple {
    public void get() {
        System.out.println("Apple1");
    }
}
public class Banana1 extends Banana {
    public void get() {
        System.out.println("Banana1");
    }
}
public class Apple2 extends Apple {
    public void get() {
        System.out.println("Apple2");
    }
}
public class Banana2 extends Banana {
    public void get() {
        System.out.println("Banana2");
    }
}

調用如下:

public class MainClass {
    public static void main(String[] args) {
        FruitFactory ff = new Fruit1Factory();
        Fruit apple = ff.getApple();
        apple.get();

        Fruit banana = ff.getBanana();
        banana.get();

        FruitFactory ff2= new Fruit2Factory();
        Fruit apple2 = ff2.getApple();
        apple2.get();

        Fruit banana2 = ff2.getBanana();
        banana2.get();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章