@
一、概述
抽象工廠模式也是屬於設計模式中的創建型模式,用於產品族的構建,抽象工廠模式是所有形態的工廠模式中最為具有一般性的一種形態。抽象工廠是指當有多個角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,是客戶端在不必指定產品的具體情況下,創建多個產品族的產品對象。
二、模式結構圖
三、Java代碼實現
還是以水果舉例首先我們要分別創建水果接口和水果工廠接口
package 抽象工廠模式;
public interface Fruit {
// 生產水果-接口
public void get();
}
package 抽象工廠模式;
public interface FruitFactory {
public Fruit getApple();
public Fruit getBanana();
}
創建具體水果的抽象類,讓具體水果抽象類實現水果接口
package 抽象工廠模式;
public abstract class Apple implements Fruit{
// 蘋果抽象類
public abstract void get();
}
package 抽象工廠模式;
public abstract class Banana implements Fruit{
// 香蕉抽象類
public abstract void get();
}
創建具體的水果類,每個水果都分為A、B兩個等級。
package 抽象工廠模式;
//Apple_A 繼承Apple
public class Apple_A extends Apple{
@Override
public void get() {
System.out.println("生產A級-蘋果");
}
}
package 抽象工廠模式;
// Apple_B繼承Apple類
public class Apple_B extends Apple{
@Override
public void get() {
System.out.println("生產B級-蘋果");
}
}
分別創建生產A級水果和B級水果的A類工廠和B類工廠,並實現工廠接口
package 抽象工廠模式;
// FruitFactory_calssA 要去實現 FruitFactory
public class FruitFactory_calssA implements FruitFactory{
// A級水果工廠只生產A級水果
@Override
public Fruit getApple() {
// 生產A級蘋果
return new Apple_A();
}
@Override
public Fruit getBanana() {
// 生產A級香蕉
return new Banana_A();
}
}
public class FruitFactory_calssB implements FruitFactory{
// B級水果工廠只生產B級水果
@Override
public Fruit getApple() {
// 生產B級蘋果
return new Apple_B();
}
@Override
public Fruit getBanana() {
// 生產B級香蕉
return new Banana_B();
}
}
調用演示*
package 抽象工廠模式;
public class test {
public static void main(String[] args) {
FruitFactory f1 = new FruitFactory_calssA();
FruitFactory f2 = new FruitFactory_calssB();
// Apple
Fruit apple_A = f1.getApple();
apple_A.get();
Fruit apple_B= f2.getApple();
apple_B.get();
// Banana
Fruit banana_A = f1.getBanana();
banana_A.get();
Fruit banana_B = f2.getBanana();
banana_B.get();
}
}
四、工廠方法模式和抽象工廠模式比較
工廠方法模式中的每一個形態都是針對一定的問題的解決方案,針對的是多個產品系列結構;而抽象工廠模式針對的是多個產品族結構,一個產品內有多個產品系列。