建立型-抽象工廠

小弟季義欽發表於2013-03-28
/*************************************************************************
 * 建立型: Singleton, Builder, Abstract Factory, Factory Method, Prototype
 * 結構型: Decorator, Composite, Proxy, Adapter, Facade
 * 行為型: Template Method, Iterator, Observer, Strategy, Command, ChainOR */
package factory;
/**
 * @author jiq
 * 型別:Creational
 * 定義: 抽象工廠模式(Abstract Factory) 提供一個介面,用於建立相關或者依賴物件的家族,
 * 		而不需要指明具體類。
 * OO設計原則: 要依賴抽象,而不要依賴具體類
 * 與工廠方法關係:抽象工廠模式用到了工廠方法模式。
 * 缺點: 如果要擴充建立的產品,需要更改抽象工廠介面。
 */
/**(抽象工廠)
 * 抽象的建立各種原料的工廠
 * 但是建立的具體原料是什麼,由其子類決定
 * */
interface PizzaIngredientFactory{	
	public Dough createDough(); 	//工廠方法
	public Sauce createSauce();		//工廠方法
	public Cheese createCheese();	//工廠方法
}

/** 抽象工廠的子類,決定建立什麼樣的具體產品 */
class NYPizzaIndigredientFactory implements PizzaIngredientFactory{
	public Cheese createCheese() { return new QQQCheese(); }
	public Dough createDough() { return new YYYDough(); }
	public Sauce createSauce() { return new WWWSauce(); }
}

/** 抽象工廠的子類,決定建立什麼樣的具體產品 */
class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory{
	public Cheese createCheese() { return new EEECheese(); }
	public Dough createDough() { return new XXXDough(); }
	public Sauce createSauce() { return new WWWSauce(); }	
}
///////////////////////////////////////////////////////////////
/**
 * 抽象的產品介面
 * */
interface Dough{}
interface Sauce{}
interface Cheese{}
class XXXDough implements Dough{}
class YYYDough implements Dough{}
class WWWSauce implements Sauce{}
class QQQCheese implements Cheese{}
class EEECheese implements Cheese{}
//測試類
public class AbstractFactoryTest {
	public static void main(String[] args) {
		PizzaIngredientFactory nyfactory  = new NYPizzaIndigredientFactory();
		nyfactory.createCheese();
		nyfactory.createDough();
		nyfactory.createSauce();
	}
}

相關文章