一、什麼是抽象工廠模式?
抽象工廠模式是所有形態的工廠模式種最爲抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個接口,使得客戶端不必指定產品的具體類型的情況下,能夠創建多個產品族的產品對象。
二、產品族和產品等級結構
代碼實現:
拷貝工廠方法模式種的Fruit、Apple、Banana、FruitFactory
(1)、修改Apple和Banana
package com.renxin.factory;
public abstract class Apple implements Fruit{
/**
* 採集蘋果
*/
public abstract void get();
}
package com.renxin.factory;
public abstract class Banana implements Fruit{
/**
* 採集香蕉
*/
public abstract void get();
}
(2)、修改FruitFactory接口
package com.renxin.factory;
public interface FruitFactory {
//實例化Apple
public Fruit getApple();
//實例化Banana
public Fruit getBanana();
}
(3)、創建NorthApple和NorthBanana並且繼承Apple和Banana、創建SouthApple和SouthBanana並且繼承Apple和Banana、
package com.renxin.factory;
public class NorthApple extends Apple {
public void get() {
System.out.println("採集北方蘋果!");
}
}
package com.renxin.factory;
public class NorthBanana extends Banana {
public void get() {
System.out.println("採集北方香蕉!");
}
}
(4)、創建具體工廠NothFriitFactory並實現接口FruitFactory
package com.renxin.factory;
public class NothFriitFactory implements FruitFactory {
public Fruit getApple() {
return new NorthApple();
}
public Fruit getBanana() {
return new NorthBanana();
}
}
(5)、創建測試類MainClass
package com.renxin.factory;
public class MainClass {
public static void main(String[] args) {
FruitFactory f = new NothFriitFactory();
Fruit apple = f.getApple();
Fruit banana = f.getBanana();
apple.get();
banana.get();
System.out.println("===============");
FruitFactory ff = new SouthFruitFactory();
Fruit apple1 = ff.getApple();
Fruit banana1 = ff.getBanana();
apple1.get();
banana1.get();
}
}
控制檯輸出結果爲:
採集北方蘋果!
採集北方香蕉!
===============
採集南方蘋果!
採集南方香蕉!
這裏畫圖說明一下:
比如說這時候我們需要採集溫室蘋果和溫室香蕉,這個時候我們只需要創建它的產品族和它的具體工廠就可以實現產品新增,而不需要去修改其他代碼!
三、模式中包含的角色及其職責
1、抽象工廠(Creator)角色(也就是上面代碼中的FruitFactory):抽象工廠模式的核心,它包含多個產品結構的聲明,任何工廠類都必須實現這個接口。
2、具體工廠(Concerte Creator)角色(也就是上面代碼中的NorthFruitFactory….):具體工廠類是抽象工廠的一個實現,負責實例化某個產品族中的產品對象。
3、抽象(Priduct)角色(也就是上面代碼中的 Fruit):抽象模式所創建的所有對象的父類,它負責描述所有實例共有的公共接口。
4、具體產品(Concrete Product)角色(也就是上面代碼中的NorthApple、NorthBanana):抽象模式所創建的具體實例對象。
總結:抽象工廠中的方法對應的是產品(也就是上面的Apple和Banana),具體工廠對應的是產品族