Spring學習必備知識之抽象工廠模式
阿新 • • 發佈:2019-02-11
*工廠模式的作用是用於建立物件
回顧工廠方法模式:針對不同的產品提供不同的工廠。這樣當有多個產品時就需要多個工廠。所以希望能一個工廠提供多種產品物件而不是單一生產產品,這就引出了抽象工廠模式。
通過例子來說明:
有兩個工廠,一個工廠A生產2廂的車,分2.0排量和3.0排量兩種;工廠B生產3廂的車,分2.0排量和3.0排量兩種
抽象工廠模式有兩個概念:產品等級結構和產品族,具體參考這篇博文。
在上面的例子中,我們可以:
定義兩個個抽象產品分別為2.0排量的車和3.0排量的車,然後用具體產品類去實現它們
抽象產品2.0排量的車:
package com.example; public interface Iproduct1 { //一個抽象產品 //2.0排量的車 public void display(); }
具體實現:
public class ProductA1 implements Iproduct1 {
@Override
public void display() {
/*
* 這是一個具體產品
* 生產2.0排量的車
*/
System.out.println("我是2廂車廠2.0排量的車");
}
}
package com.example; public class ProductA2 implements Iproduct1 { @Override public void display() { System.out.println("我是3廂車廠2.0排量的車"); } }
抽象產品3.0排量的車
public interface Iproduct2 {
//一個抽象產品
//3.0排量的車
public void display();
}
具體實現
public class ProductB1 implements Iproduct2 {
@Override
public void display() {
/*
* 這是一個具體產品
* 生產3.0排量的車
*/
System.out.println("我是2廂車廠3.0排量的車");
}
}
public class ProductB2 implements Iproduct2 { @Override public void display() { /* * 這是一個具體產品 * 生產3.0排量的車 */ System.out.println("我是3廂車廠3.0排量的車"); } }
接下來定義抽象工廠:
public interface IFactory {
//一個抽象工廠
public Iproduct1 createCar2();
public Iproduct2 createCar3();
}
具體工廠1:
public class FactoryA implements IFactory {
/*
* 2廂車的具體工廠
*/
@Override
public Iproduct1 createCar2() {
return new ProductA1();
}
@Override
public Iproduct2 createCar3() {
return new ProductB1();
}
}
具體工廠2:
public class FactoryB implements IFactory {
@Override
public Iproduct1 createCar2() {
return new ProductA2();
}
@Override
public Iproduct2 createCar3() {
return new ProductB2();
}
}
這樣一個工廠就可以提供兩個具體產品,與工廠方法模式的區別就出來了!
接下來我們用客戶端來測試:比如我們想建立一個3廂3.0排量的車
public class Client {
public static void main(String[] args){
IFactory factory = new FactoryB();
factory.createCar3().display();
}
}
執行結果:
我參考學習的地址:設計模式