1. 程式人生 > >Spring學習必備知識之抽象工廠模式

Spring學習必備知識之抽象工廠模式

*工廠模式的作用是用於建立物件

回顧工廠方法模式:針對不同的產品提供不同的工廠。這樣當有多個產品時就需要多個工廠。所以希望能一個工廠提供多種產品物件而不是單一生產產品,這就引出了抽象工廠模式。

通過例子來說明:

有兩個工廠,一個工廠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();
	}
}

執行結果:

我參考學習的地址:設計模式