2014年3月1號上午去一家外包公司面試。面試中又問道有用過單例模式、工廠模式嗎。當時就被問懵了,之前都是看過的,怎麼面試問道就不知道怎麼答了。
在這裏將持續總結一下java的一些常見的設計模式。
歡迎大家斧正!
單例模式:(CSDN中搜索到的)
主要優點:
1、提供了對唯一實例的受控訪問。
2、由於在系統內存中只存在一個對象,因此可以節約系統資源,對於一些需要頻繁創建和銷燬的對象單例模式無疑可以提高系統的性能。
3、允許可變數目的實例。
主要缺點:
1、由於單利模式中沒有抽象層,因此單例類的擴展有很大的困難。
2、單例類的職責過重,在一定程度上違背了“單一職責原則”。
3、濫用單例將帶來一些負面問題,如爲了節省資源將數據庫連接池對象設計爲的單例類,可能會導致共享連接池對象的程序過多而出現連接池溢出;如果實例化的對象長時間不被利用,系統會認爲是垃圾而被回收,這將導致對象狀態的丟失。
工廠模式:
- 工廠模式主要是爲創建對象提供過渡接口
- 分爲三類:
- 簡單工廠模式(Simple Factory)
- 簡單工廠模式又稱靜態工廠方法模式
- 意義:定義一個用於創建對象的接口
- 組成:
- 工廠類角色
- 抽象產品角色
- 具體產品角色
- 工廠方法模式(Factory Method)
- 工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承
- 意義:
- 這樣在簡單工廠模式中幾種在工廠方法中的壓力可以由它的子類來分擔
- 組成:
- 抽象工廠角色
- 具體工廠角色
- 抽象產品角色
- 具體產品角色
- 抽象工廠模式(Abstract Factory)
- 用意:
- 給客戶端提供一個接口,可以創建多個產品族中的產品對象
- 滿足條件:
- 系統中有多個產品族,而系統一次只可能消費一族產品。
- 同屬於同一個產品族的產品一起使用
- 組成:
- 抽象工廠角色
- 具體工廠角色
- 抽象產品角色
- 具體產品角色
- 用意:
- 簡單工廠模式(Simple Factory)
- 工廠模式在什麼情況下使用:
- 當客戶程序不需要知道要使用對象的創建過程
- 客戶程序使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象