23種設計模式之抽象工廠
阿新 • • 發佈:2018-12-18
目錄
1.簡介
抽象工廠模式是為建立一組相關或相互依賴的物件提供的一個介面,並且無需指定具體的類。很明顯,它是工廠模式的升級版。之前的工廠模式一個工廠就可以了,現在有種情況是工廠模式無法滿足的,就是如果產品之間具有一種相互關係,就只能用抽象工廠模式了。
2.優點
同樣是具有了很好的封裝性,並且產品之間的相互關係將處於一種非公開的狀態。
3.缺點
橫向擴充套件容易,縱向擴充套件困難。橫向擴充套件是從源頭開始擴充套件,即從產品進行擴充套件,再新建工廠組裝,符合開閉原則;而縱向擴充套件是需要修改工廠介面,對其中的方法進行更改,這嚴重違法了開閉原則。
4.形式
這裡以兩種產品的互動展開,抽象A產品類
public abstract class AProductA {
public void shareMethod(){}
public void ownMethod(){}
}
抽象A產品類1實現
public class ProductA1 extends AProductA {
public void ownMethod() {
System.out.println("A1產品");
}
}
抽象A產品類2實現
public class ProductA2 extends AProductA { public void ownMethod() { System.out.prinln("A2產品"); } }
抽象B產品類
public abstract class AProductB {
public void shareMethod(){}
public void ownMethod(){}
}
抽象B產品類1實現
public class ProductB1 extends AProductB {
public void ownMethod() {
System.out.println("B1產品");
}
}
抽象B產品類2實現
public class ProductB2 extends AProductB { public void ownMethod() { System.out.prinln("B2產品"); } }
抽象工廠類
public abstract class AFactory {
public abstract AProductA makeProductA();
public abstract AProductB makeProductB();
}
A工廠的做法是
public class FactoryA extends AFactory {
public AProductA makeProductA() {
return new ProductA1();
}
public AProductB makeProductB() {
return new ProductB1();
}
}
B工廠的做法是
public class FactoryB extends AFactory {
public AProductA makeProductA() {
return new ProductA2();
}
public AProductB makeProductB() {
return new ProductB2();
}
}