簡單工廠不是一個標準的設計模式,但是他太常用,有簡單,所以這是第一個熱身運動
接口回顧
Java接口的概念:
java接口是一種特殊的抽象類,跟一般抽象類相比,接口裏面的所有方法都是抽象方法,接口裏面的所有方法都是抽象,所以屬性都是常量.也就是說,接口只有方法定義而沒有實現;
用處
定義實現類的外觀,約束實現類的行爲.接口相當於一份契約,根據外包應用需要的功能,約定實現類應該要實現的功能.
接口的思想
濃縮下來:“封裝隔離”:對被隔離體行爲的封裝,或者對被隔離體職責的封裝;而隔離指的是外部調用和內部實現,外部調用只能通過接口進行調用,外包調用是不知道內部具體實現的,也就是說外包調用和內部實現是被接口隔離開的
使用接口的好處
外包調用和內部實現被接口隔離,那麼只有接口不變,內部實現的變化就不會影響到外部應用,從而使得系統更靈活,擴展性和可危害性;”接口是系統可插拔性的保證”
接口和抽象的選擇
1.優先選擇接口 2.既要定義子類的行爲又要爲子類提供公共的功能時選擇抽象類
面向接口編程是Java編程的重要原則
通常,java程序分爲:表現層,邏輯層,數據層,他們之間都有通過接口來通訊
每一個層裏面,又有許多小模塊,每個模塊對外則是一個整體,所以一個模塊對外應該提供接口,其他地方需要使用到這個模塊的功能時,可以通過此接口來進行調用.”接口是被其隔離部分的外觀”
那麼”組件”是什麼東西?
組件就是能完成一個功能的封裝體.
Api api = new Imple()
在以上代碼的時候,在客戶端,既有接口,又有實現類,與思想”封裝隔離”不符合?
那麼我們如何做得只只接口不知實現呢?
解決方案:簡單工廠
簡單工廠能幫助我們真正地開始面向接口編程,像以前的做法,其實只是用到接口的多態部分的功能,而最重要的”封裝隔離性”並有沒體現出來
疑問:把”new Impl()”放到客戶端和放到簡單工廠裏面有什麼不同?
簡單工廠的位置是位於封裝體內的,也就是簡單工廠是根接口和具體的實現在一起的,算是封裝體內部的一個類,所以簡單工廠知道具體的實現類是沒有關係額.重新整理一下簡單工廠的結構圖
簡單工廠的寫法:
1.傳人type:
由於從客戶端調用工廠的時候傳人蔘數,就說明客戶端必須hide每個參數的含義,也需要理解每個參數對應的功能處理,這就要求必須在一定程度上向客戶暴露一定的內部實現細節
2.使用配置文件和反射技術
簡單工廠的本質是:選擇實現