框架的基礎知識
- 框架是什麼:框架就是能完成一定功能的半成品軟件。
- 框架能幹什麼
- 完成一定功能,加快應用開發進度。
- 給我們一個精良的程序架構
- 對框架的理解
- 基於框架來開發,事情還是那些事情,只是看誰做的問題
- 基於框架來開發,可以不去做框架所做的事情,但是應噶明白框架在幹什麼,以及框架是如何實現相應功能的
- 框架和設計模式的關係
- 設計模式比框架更抽象
- 設計模式是比框架更小的體系結構元素
- 框架比設計模式更加特例化
工廠方法模式
定義:
定義一個用於創建對象的接口,讓子類決定實例化哪一個類,Factory Method使一個類的實例化延遲到其子類。
結構:
-
Product:定義實際使用的對象的接口
-
ConcreteProduct:具體的Product接口的實現對象
-
Creator:工廠,聲明工廠方法
-
ConcreteCreator:具體的工廠
//產品 public interface Product {} //具體產品 public class ProductImpl implements Product{} //工廠 public abstract class Factory { //創建Product的工廠方法 public abstract Product factoryProduct(); //鉤子(hook)等其他方法 } public class FactoryImpl extends Factory{ //返回具體的產品 @Override public Product factoryProduct() { return new ProductImpl(); } }
理解工廠方法模式
-
本質:延遲到子類來選擇實現
-
實現成抽象類:
工廠方法的實現中,父類通常會是一個抽象類,裏面包含創建所需對象的方法,這些抽象方法就是工廠方法。注意:子類在實現這些抽象方法時,通常並不是真正由子類來實現具體功能,而是在子類的方法裏做選擇,選擇具體的產品實現對象。
- 實現成具體類:
也可以把父類實現成一個具體類。這種情況下,通常是在父類中提供獲取所需對象的默認實現,這樣即使沒有具體的子類,也能夠運行。
通常這種情況下還是需要具體的子類來決定具體要如何創建父類所需要的對象。這種情況稱爲工廠方法爲子類提供了掛鉤(鉤子方法hook,詳見模板方法模式)。通過工廠方法,可以讓子類對象來覆蓋父類的實現,從而提供更好的靈活性。
-
誰來使用工廠方法創建的對象?
工廠方法模式的本意,是由Factory對象內部的方法來使用工廠方法創建的對象,也就是說,工廠方法一般不提供給Factory外部使用。即:在工廠方法模式裏,客戶端要麼使用Factory對象,要麼使用Factory創建的對象,一般客戶端不直接使用工廠方法。當然也可以直接把工廠方法暴露給客戶端操作,但一般不這麼做
/** *@Function: 客戶端使用Factory對象的情況 */ public abstract class Factory { /** * 工廠方法,一般不對外 */ protected abstract Product factoryProduct(); /** * 提供給外部使用的方法 * 客戶端一般使用這些方法來完成所需功能 */ public void someOperation(){ //在這裏使用工廠方法 Product p=factoryProduct(); } }
工廠方法模式與IoC/DI
理解IoC/DI
- IoC:Inversion of Control DI:Dependency Injection
- 三方參與者:某個對象;IoC/DI容器;某個對象的外部資源
- 依賴注入與控制反轉是同一概念嗎?
依賴注入和控制反轉是對同一件事情的不同描述。
- 依賴注入(是從應用程序的角度描述的):應用程序依賴容器創建並注入它所需要的外部資源
- 控制反轉(是從容器的角度去描述的):容器控制應用程序,由容器反向的嚮應用程序注入其所需的外部資源
- 意義
IoC/DI思想讓應用程序由主動變被動,被動的等待IoC/DI容器來創建並注入它所需要的資源。這樣有效地分離了對象和所需要的外部資源,使得它們鬆散耦合,有利於功能複用,更重要的是使得程序的整個體系結構變得非常靈活。
工廠方法與IoC/DI
思想相似,都是“主動變被動”,進行了“主從換位”,從而獲得了更靈活的程序結構
工廠方法模式的思考
工廠方法模式是爲克服簡單工廠的缺點(主要是爲滿足開閉原則)而設計出來的,對設計原則的體現:依賴倒置原則
工廠方法模式優缺點
優點:
-
可以在不知具體實現的情況下編程
-
更容易擴展對象的新版本
-
掛鉤使得擴展新的對象版本變的非常容易
-
-
連接平行的類層次
缺點:
-
具體產品對象和工廠方法的耦合性