工廠方法屬於建立型設計模式。
設計意圖:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。
靜態工廠使用物件導向的方式,有效的解決了增加新產品給客戶端和實現類帶來的**修改問題,封裝了建立過程,減低了增加新產品帶來的**修改錯誤,但是新增功能需要修改客戶端**和工廠建立類的判斷邏輯,這樣的設計違背了開放-封閉原則,對擴充套件開放,對修改封閉,那我們就需要找一種方式避免增加新的功能時修改工廠建立方法的邏輯。(畢竟會對原有**做修改難免會有失誤)
工廠方法就是有效解決這個問題的設計模式。
類圖:
通過工廠方法模式的類圖可以看到,工廠方法模式有四個要素:
通過類圖我們還可以看到,每增加乙個產品就增加乙個對應的工廠來建立它,這樣整個工廠和產品體系都沒有什麼變化,而只是擴充套件的變化,這就完全符合開放-封閉的原則了。
我來看**例項:
package com.factory.staticfactory.extend;
/** * @author gaoxu
* 實踐出真知!產品介面
*/public inte***ce ioperation
產品介面定義產品的處理方式。
package com.factory.staticfactory.extend;
/** * @author gaoxu
* 實踐出真知!抽象父類
*/public abstract class abstractoperation implements ioperation
public void setnuma(double numa)
public double getnumb()
public void setnumb(double numb)
}
實現介面並提供資料設定公共的方法。
package com.factory.staticfactory.extend;
/** * @author gaoxu
* 實踐出真知!
*/public class operationadd extends abstractoperation
}
package com.factory.staticfactory.extend;
/** * @author gaoxu
* 實踐出真知!
*/public class operationsub extends abstractoperation
}
加法、減發類實現各自的業務邏輯。
package com.factory.factorymethod;
import com.factory.staticfactory.extend.ioperation;
/**工廠方法介面
* @author gaoxu
* 實踐出真知!
*/public inte***ce ifactory
package com.factory.factorymethod;
import com.factory.staticfactory.extend.ioperation;
import com.factory.staticfactory.extend.operationadd;
/**加法工廠類
* @author gaoxu
* 實踐出真知!
*/public class addfactory implements ifactory
}
package com.factory.factorymethod;
import com.factory.staticfactory.extend.ioperation;
import com.factory.staticfactory.extend.operationsub;
/**減發工廠類
* @author gaoxu
* 實踐出真知!
*/public class subfactory implements ifactory
}
工廠方法的優點:
1:嚴格遵循物件導向類的設計原則,比如單一職能原則、開-閉原則、依賴倒置原則、迪公尺特原則。
2:業務實現解耦。
工廠方法是靜態工廠的進一步抽象與推廣,由於使用了多型性,工廠方法模式保持了靜態工廠的優點同時又克服了它的缺點,不過工廠方法自己的缺點是每加乙個產品都需要增加乙個工廠類,增加了大量的開發工作量。
跟著例項學習設計模式(2) 靜態工廠(建立型)
靜態工廠設計模式是建立型設計模式。設計意圖 例項化出我們需要的類物件,這些物件可以實現不同的功能,也可能只實現乙個功能!類圖關係 通過類圖關係我們可以看到靜態工廠負責建立operationfather類的物件,我們來看一下例項 我們是想實現乙個計算器,計算器的功能暫時有加法 減法功能,以後可能隨時增...
設計模式例項學習 工廠方法
物件建立型模式 定義乙個用於建立物件的介面,讓子類決定例項化那個類。工程方法使乙個類的例項化延遲到其子類。大學裡面有很多不同的學院,不同的學院教育並輸出 生產出 不同專業的學生。現在有三個學院,分別是軟體專業,物理專業,英語專業。輸出每個學院的乙個學生。public abstract class s...
跟著例項學習設計模式(1) 單例模式(建立型)
單例模式屬於建立型設計模式。設計意圖 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式根據例項化物件時機的不同分為兩種,一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載入時候,就例項化乙個物件交給自己的引用 而懶漢式在呼叫取得例項方法的時候才會例項化物件。如下 餓漢式 pa...