Java基礎-抽象工廠模式

Merbng發表於2018-05-11

概念

提供一個介面,用於建立相關的物件家族。

類圖

設計模式-抽象工廠模式.png
設計模式-抽象工廠模式.png

抽象工廠模式建立的是物件家族,也就是很多物件而不是一個物件,並且這些物件是相關的,也就是說必須一起建立出來。而工廠模式只是用於建立一個物件,這和抽象工廠模式有很大不同。
抽象工廠模式用到了工廠模式來建立單一物件,AbstractFactory中的createPruductA和createProductB方法都是讓子類來實現,這兩個方法單獨來看就是在建立一個物件,這符合工廠模式的定義。
至於建立物件的家族這一概念是在Client體現,Client要通過AbstractFactory同時呼叫兩個方法來建立出兩個物件,在這裡這兩個物件就有很大的相關性,Client需要同時建立出這兩個物件。
從高層次來看,抽象工廠使用了組合,即Client組合了AbstractFactory,而工廠模式使用了繼承。

程式碼

public class AbstractProductA{ 
}
public class AbstractProductB{
}
public class ProductA1 extends AbstractProductA{
}
public class ProductA2 extends AbstractProductA{
}
public class ProductB1 extends AbstractProductB{
}
public class ProdectB2 extends AbstractProductB{
}
public abstract class AbstractFactory{
abstract AbstractProductA createProductA();
abstract AbstractProductB createProductB();
}
public class ConcreateFactory1 extends AbstractFactory{
AbstractProductA createProductA(){
return new ProductA1();
}
AbstractProductB createProductB(){
return new ProductB1();
}
}
public class ConcreateFactory2 extends AbstractFactory{
AbstractProductA createProductA(){
return new ProductA2();
}
AbstractProductB createProductB(){
return new ProductB2();
}
}
public class Client{
public static void main(String[] args){
AbstractFactory abstractFactory =new ConcreateFactory1();
AbstractProductA productA =abstractFactory.createProductA();
abstractFactory =new ConcreateFactory2();
productA =abstractFactory.createProductA();
}
}
複製程式碼

相關文章