學而時習之,溫故而知新。
敵人出招(使用場景)
不同的業務場景下要創建不同的對象,但是這些對象又有共同的特點。如何復用代碼呢?你會想到,這些對象可以抽象出一個基類/抽象類就行了,那么隨著業務的增加,子類不斷地增多,繼承這抽象類的子類越來越多——零零散散的放在各個角落——有沒有更好的組織、管理方式呢?
你出招
這個時候就要簡單工廠模式這招了,它屬于創建型設計模式。
具體招式
有3個角色組成——工廠類、抽象產品類和具體產品類。
工廠類是對上述說的多個具體產品子類的管理,把零零散散各個角落里的各個子類統一管理起來。一般在工廠類的構造函數里if else根據入參new出對應子類對象,返回其父類指針(抽象類指針)。
抽象產品類,是業務不變化的點。
具體產品類,是業務不斷變化的點——就是可以不斷擴展出新類。
這樣的話在業務層面,根據不同業務的需求讓工廠類創建不同的對象,實現業務需求。這樣工廠類內部產品類的變化對業務層不可見,可以分開更新——在應用層面又抵抗了變化。
抽象產品類帶來的另一個設計模式
因為抽象產品類是所有具體產品子類的抽象,這樣就可以把所有具體產品類的處理流程節點抽象到抽象類的方法里,那么具體產品類負責實現——有沒有發現,這是模板模式。
缺點
可以看到,每擴展一個具體產品類,都要修改工廠類的內部實現——這一點沒有遵循開閉原則,這點不太好。