定義:定義一個建立對象的接口,由子類決定要實例化的對象類型,工廠方法讓類的實例化推遲到子類中java
要點:框架
1.工廠模式讓實現和使用解耦ide
2.工廠方法是繼承於超類,實現超類中抽象建立對象的接口,不用於簡單工廠,使用組合方式來達到解耦的目的工具
3.工廠方法更像是一種框架,而簡單工廠只是一種簡單的實現方式,像一種工具測試
4.工廠方法並非真正運行時決定建立的對象,而是選擇的子類決定了建立的對象,一樣能夠用多個簡單工廠的方式來達到這樣的目的。可是簡單工廠違反了OO設計原則「依賴抽象,不要依賴具體類」設計
實現:code
package com.jv.designpatterns.factory.factorymethod; //定義匹薩的超類 public interface Pizza { }
package com.jv.designpatterns.factory.factorymethod; public class PizzaA implements Pizza { }
package com.jv.designpatterns.factory.factorymethod; public class PizzaB implements Pizza { }
package com.jv.designpatterns.factory.factorymethod; public abstract class PizzaStore { //定義抽象建立對象實例方法,交有子類決定建立的對象類型 public abstract Pizza createPizza(); public void orderPizza() { Pizza p = createPizza(); //其餘方法 } }
package com.jv.designpatterns.factory.factorymethod; public class PizzaStoreA extends PizzaStore { //子類實現抽象父類中的 建立匹薩對象的抽象方法,由子類決定要建立的對象究竟是誰 @Override public Pizza createPizza() { return new PizzaA(); } }
package com.jv.designpatterns.factory.factorymethod; public class PizzaStoreB extends PizzaStore { //子類實現抽象父類中的 建立匹薩對象的抽象方法,由子類決定要建立的對象究竟是誰 @Override public Pizza createPizza() { return new PizzaB(); } }
沒有更詳細的模擬場景寫測試代碼,感興趣的同窗能夠嘗試着添加代碼來完成測試,動動手,動動腦對象