定義:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使得乙個類的例項化延遲到了其子類。
/**
* 抽象工廠介面,用於建立計算物件
*/public inte***ce ifactory
/** * 抽象計算介面,表示用於實現的業務
*/public inte***ce calculate
/** * 具體工廠類,實現抽象工廠介面,返回乙個具體的計算物件
*/class addfactory implements ifactory
}class subfactory implements ifactory
}class mulfactory implements ifactory
}class divfactory implements ifactory
}/**
* 具體操作,實現計算介面
*/class add implements calculate
}class sub implements calculate
}class mul implements calculate
}class div implements calculate
}/**
* 測試
*/public class test
}
工廠方法模式優點:與簡單工廠相比,工廠方法模式克服了簡單工廠違背開放-封閉原則的缺點,又保持了風窗物件建立過程的優點。
簡單工廠模式優點:工廠類中包含了必要的判斷,根據客戶端選擇條件,動態例項化相關的類。
工廠方法模式缺點:每增加乙個產品,就需要額外的增加乙個產品工廠的類,增加了額外的開發量。
小結:可以看出:工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠,選擇判斷還是在的;工廠方法把簡單工廠的內部邏輯判斷移動到了客戶端,原來是更改工廠類,現在是更改客戶端。
/**
* 抽象工廠介面,用於建立計算物件
*/public inte***ce ifactory
/** * 抽象計算介面,表示用於實現的業務
*/public inte***ce calculate
/** * 具體工廠,使用匿名內部類實現介面
*/public class addfactory implements calculate
public static ifactory factory = new ifactory()
};}/**
* 將改動的工廠類,做實際運算(可以加入擴充套件方法,實現各個具體工廠)
*/public class factories
}/**
* 好處:不用改動客戶端
*/public class test
}
優點:減少了類的建立次數,只需要建立乙個工廠類(經典的工廠方法模式在增加產品時,需要建立具體操作類和具體操作工廠類)
可以使用的手段:
1.客戶端可以不用修改,只修改factories類的乙個方法(實現了對客戶端細節的遮蔽),但只能使用其中一種具體工廠類
2.可增加factories類中的方法,讓其有多個具體操作類的實現,但是客戶端此時就需要知道有什麼方法了,雖然增加了客戶端的負擔,但可實現**的復用
設計模式 3 工廠方法模式
1.意圖 定義乙個用於建立物件的的介面,讓子類決定例項化哪乙個類.2.適用性 當乙個類不知道它必須所建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。3.抽象工廠和工廠方法的區別 抽象工廠 模式依賴於 工廠方法 模式的。因此,抽象工廠強調的是前面的動詞 抽象 也就是說,你將工廠...
設計模式(3)工廠方法模式
簡單工廠設計模式的思路,決定了每次新增一種具體的產品時,就需要更改工廠內部的產品構成。因為開閉原則,決定了對外開放介面,對內封閉的思路,工廠方法設計模式,不在使用工廠類統一建立所有的具體產品,不同工廠針對不同的產品,新增產品時,需要同時新增對應的工廠。工廠方法模式 定義乙個用於建立物件的介面,但是讓...
初始設計模式3 工廠方法模式
工廠方法模式,即定義乙個用於建立物件的介面,讓子類決定例項化哪個類。定義抽象產品類 public abstract class product 定義具體產品類 public class conproduct extends product 定義抽象工廠類 public abstract class ...