簡單工廠並非設計模式,能夠說是一種編程習慣.工廠方法模式,抽象工廠模式都屬於對象建立型模式.java
public abstract class Product { abstract void prepare(); abstract void pack(); }
public class ProductA extends Product{ public void prepare() { } public void pack() { } }
public class ProductB extends Product{ public void prepare() { } public void pack() { } }
public class SimpleProductFactory { public Product createProduct(String type){ if("productA".equals(type)){ return new ProductA(); }else if("productB".equals(type)){ return new ProductB(); } return null; } }
public class Client { public static void main(String[] args) { SimpleProductFactory factory = new SimpleProductFactory(); Product product = factory.createProduct("productA"); product.prepare(); product.pack(); } }
經過讓子類決定該建立的對象是什麼,來達到將對象建立的過程封裝的目地.工廠方法模式定義了一個建立對象的接口,但由子類決定要實例化的類是哪個.工廠方法讓類把實例化推遲到子類.但每新增一個新產品時就須要增長兩個類.編程
public abstract class Product { abstract void prepare(); abstract void pack(); }
public abstract class Creator { public Product orderProduct(){ Product product = factoryMethod(); product.prepare(); product.pack(); return product; } protected abstract Product factoryMethod(); }
public class ConcreteProduct extends Product{ void prepare() { } void pack() { } }
public class ConcreteCreator extends Creator{ protected Product factoryMethod() { return new ConcreteProduct(); } }
public class Test { public static void main(String[] args) { Creator creator = new ConcreteCreator(); Product product = creator.orderProduct(); } }
抽象工廠模式提供一個接口,用於建立相關或依賴對象的家族,而不須要明確指定具體類.容許客戶端使用抽象的接口來建立一組相關的產品,而不須要關係實際產出的具體產品是什麼。這樣一來,客戶就能夠從具體的產品中被解耦。它的優勢是隔離了具體類的生成,使得客戶端不須要知道什麼被建立了,而缺點就在於新增新的行爲會比較麻煩,由於當添加一個新的產品對象時,須要更加須要更改接口及其下全部子類。設計模式