UML類圖

抽象工廠模式
代碼示例
- 定義蘋果類接口,包含一個描述方法
/**
* 蘋果抽象類
*/
public interface IApple {
/**
* 具體描述
*/
void describe();
}
- 紅蘋果,實作了接口蘋果和定義的方法
/**
* 紅蘋果
*/
public class RedApple implements IApple {
@Override
public void describe() {
System.out.println("This is red apple");
}
}
- 青蘋果,實作了接口蘋果和定義的方法
/**
* 青蘋果
*/
public class GreenApple implements IApple {
@Override
public void describe() {
System.out.println("This is green apple");
}
}
- 定義梨子類接口,包含一個描述方法
/**
* 梨子抽象類
*/
public interface IPear {
/**
* 具體描述
*/
void describe();
}
- 青梨,實作了接口梨子和定義的方法
/**
* 青梨
*/
public class GreenPear implements IPear {
@Override
public void describe() {
System.out.println("This is green pear");
}
}
- 黃梨,實作了接口梨子和定義的方法
/**
* 黃梨
*/
public class YellowPear implements IPear {
@Override
public void describe() {
System.out.println("This is yellow pear");
}
}
- 水果工廠抽象類
/**
* 水果工廠抽象類
*/
public interface IFruitFactory {
/**
* 建立蘋果執行個體
*
* @return
*/
IApple createApple();
/**
* 建立梨子執行個體
*
* @return
*/
IPear createPear();
}
- 工廠A: 負責生産青蘋果和青梨
/**
* 工廠A: 負責生産青蘋果和青梨
*/
public class FactoryA implements IFruitFactory {
@Override
public IApple createApple() {
return new GreenApple();
}
@Override
public IPear createPear() {
return new GreenPear();
}
}
- 工廠B: 負責生産紅蘋果和黃梨
/**
* 工廠B: 負責生産紅蘋果和黃梨
*/
public class FactoryB implements IFruitFactory {
@Override
public IApple createApple() {
return new RedApple();
}
@Override
public IPear createPear() {
return new YellowPear();
}
}
- 用戶端測試
public class Main {
public static void main(String[] args) {
IFruitFactory factoryA = new FactoryA();
IApple apple = factoryA.createApple();
apple.describe();
IPear pear = factoryA.createPear();
pear.describe();
System.out.println("-------------------");
IFruitFactory factoryB = new FactoryB();
apple = factoryB.createApple();
apple.describe();
pear = factoryB.createPear();
pear.describe();
}
}
總結思考
抽象工廠用于提供建立一系列相關或互相依賴的接口,而無需指定它們具體的類。對比工廠方法,抽象工廠面對的是整個産品族,而工廠方法面對的是獨立的産品。
相關連結
示例代碼 設計模式:簡單工廠、工廠方法、抽象工廠之小結與差別