工廠,代理,單例模式的理解
阿新 • • 發佈:2018-12-21
簡單工廠模式: 1個介面定義方法, 2個實現類重寫介面方法, 1個工廠類 定義方法返回型別是介面,但是返回值一般是該介面的實現類,介面是抽象的,不能例項化的,但是介面可以宣告一個引用,指向其實現類。 1個測試類 建立工廠類物件,呼叫其方法,傳type值,用來確認返回值是改介面哪個實現類。得到的返回值是該介面的實現類,呼叫其方法列印輸出語句。 優缺點:這樣模組清晰化,每個部分都各司其職,分工明確,程式碼就實現最漸層意義上的 “可維護” 啦。 說到缺點,當我們需要增加一產品, 比如在學習一門新技術時,這樣個小功能我們就要去新增一個新的類,同時我們需要在Factory中改動到switch 裡面的程式碼, 這是耦合性很高的表現啦! 工廠模式: 一個A介面,定義一個方法規範(),返回型別:B介面。這裡A介面相當於工廠的規範條件。 一個實現類AImpl,重寫方法,返回型別B介面,返回值B介面的實現類,連線的是A介面。這裡相當於一個分廠 一個B介面,定義一個方法規範(學習技術),返回型別:void 一個實現類BImpl,重寫方法,要學習的技術,比如python,連線的是B介面 一個測試類C,建立一個A介面的實現類,呼叫其方法,返回B介面對應的實現類,呼叫其方法,列印輸出。 優缺點:可以設立多個子工廠,而不是所有的產品有單一的工廠來生產,而是給各自特色的子工廠來生產。 比如:要增加一門新技術,可以建立一個分廠,就是再建立一個AImpl。但是這樣做每增加一門 技術,相應的也要增加一個子工廠,加大了額外的開發量。 /*抽象工廠: * 1.一個A介面 定義一個方法,比如關於前端的, * 2.一個AImpl實現類,實現A介面的方法,要學習H5 * 3.一個B介面 定義一個方法,比如關於後端的, * 4.一個BImpl實現類,實現B介面的方法,要學習Java * 5.一個抽象類(工廠) 定義兩個抽象方法,返回型別是A介面,B介面 * 6.一個抽象類的子類(子工廠) 重寫父類的兩個方法,返回值是A介面實現類,B介面實現類 * 7.一個測試類,建立一個子工廠物件,呼叫兩個方法可以得到兩個不同介面的實現類物件,呼叫其方法,列印輸出。 * */ 抽象工廠優缺點:可以建立分工廠來增加已知種類的新技術,大大降低了耦合性,但是但出現一種不是已知種類的新種類時 就需要建立一個新的介面,就需要改變其工廠類的方法,影響到所有子工廠,必須重寫父類的抽象方法 代理模式:代理類與委託類有同樣的介面,代理類主要負責處理資訊,過濾資訊,處理業務呼叫的還是委託類的方法,測試的時 候是建立代理類的物件執行其方法。 優缺點:代理物件必須提前寫出,如果介面發生了變化,代理物件的程式碼也要進行維護。 單例模式 懶漢:1 私有的建構函式,只限本類使用, private 類名(){} 2 本類的私有的靜態的屬性(伴隨著類的載入而載入,且只加載一次) private static 類名 類物件名 = null; 3 提供一個物件可以訪問該類公共的靜態的方法 public static 類名 方法名(){ if(類物件名==null){類物件名 = new 類名();} return 類物件名; } 惡漢:1 private 類名(){} 2 private static 類名 類物件名 = new 類名(); 3 public static 類名 方法名(){ return 類物件名; } /** * 懶漢和餓漢的區別 * 1,類載入速度 懶漢快,餓漢慢 懶漢載入時不用初始化物件 * 2,執行時獲取物件的速度 懶漢慢,餓漢快 懶漢呼叫方法時才例項化物件 * 3,佔用資源情況 懶漢呼叫獲取例項方式才載入物件,餓漢是該類被例項化時一直佔用資源 */