1. 程式人生 > >相關模式辨析——研磨設計模式——跟著cc學設計系列

相關模式辨析——研磨設計模式——跟著cc學設計系列

裝飾模式與策略模式 這兩個模式可以組合使用。 策略模式也可以實現動態的改變物件的功能,但是策略模式只是一層選擇,也就是根據策略選擇一下具體的實現類而已。而裝飾模式不是一層,而是遞迴呼叫,無數層都可以,只要組合好裝飾器的物件組合,那就可以依次呼叫下去,所以裝飾模式會更靈活。 而且策略模式改變的是原始物件的功能,不像裝飾模式,後面一個裝飾器,改變的是經過前一個裝飾器裝飾過後的物件,也就是策略模式改變的是物件的核心,而裝飾模式改變的是物件的外殼。 這兩個模式可以組合使用,可以在一個具體的裝飾器裡面使用策略模式,來選擇更具體的實現方式。比如前面計算獎金的另外一個問題就是參與計算的基數不同,獎金的計算方式也是不同的。舉例來說:假設張三和李四參與同一個獎金的計算,張三的銷售總額是2萬元,而李四的銷售額是8萬元,它們的計算公式是不一樣的,假設獎金的計算規則是,銷售額在5萬以下,統一3%,而5萬以上,5萬內是4%,超過部分是6%。 參與同一個獎金的計算,這就意味著可以使用同一個裝飾器,但是在裝飾器的內部,不同條件下計算公式不一樣,那麼怎麼選擇具體的實現策略呢?自然使用策略模式就好了,也就是裝飾模式和策略模式組合來使用。

相關推薦

研磨設計模式 之 備忘錄模式(Memento)1——跟著cc設計系列

19.1  場景問題 19.1.1  開發模擬系統 考慮這樣一個模擬應用,功能是:模擬運行鍼對某個具體問題的多個解決方案,記錄執行過程的各種資料,在模擬執行完成過後,好對這多個解決方案進行比較和評價,從而選定最優的解決方案。 這種模擬系統,在很多領域都有應用,比如:工作流系

研磨設計模式 之 原型模式(Prototype)1 ——跟著cc設計系列

9.1  場景問題 9.1.1  訂單處理系統 考慮這樣一個實際應用:訂單處理系統。 現在有一個訂單處理的系統,裡面有個儲存訂單的業務功能,在這個業務功能裡面,客戶有這麼一個需求:每當訂單的預定產品數量超過1000的時候,就需要把訂單拆成兩份訂單來儲存,如果拆成兩份訂單

研磨設計模式 之 迭代器模式(Iterator)1——跟著cc設計系列

14.1  場景問題 14.1.1  工資表資料的整合        考慮這樣一個實際應用:整合工資表資料。        這個專案的背景是這樣的,專案的客戶方收購了一家小公司,這家小公司有自己的工資系統,現在需要整合到客戶方已有的工資系統上。        客戶方已有的工

研磨設計模式 之 代理模式(Proxy)2——跟著cc設計系列

11.2  解決方案 11.2.1  代理模式來解決 用來解決上述問題的一個合理的解決方案就是代理模式。那麼什麼是代理模式呢? (1)代理模式定義   (2)應用代理模式來解決的思路 仔細分析上面的問題,一次性訪問多條資料,這個可能性是很難避免的,是客戶的需要。也就是說,

研磨設計模式 之 原型模式(Prototype)2 ——跟著cc設計系列

9.2  解決方案 9.2.1  原型模式來解決 用來解決上述問題的一個合理的解決方案就是原型模式。那麼什麼是原型模式呢? (1 )原型模式定義   (2 )應用原型模式來解決的思路 仔細分析上面的問題,在saveOrder方法裡面,已經有了訂單介面型別的物件例項,是從外部傳入的,但是這裡只是知道這

研磨設計模式 之 迭代器模式(Iterator)2——跟著cc設計系列

14.2  解決方案 14.2.1  迭代器模式來解決 用來解決上述問題的一個合理的解決方案就是迭代器模式。那麼什麼是迭代器模式呢? (1)迭代器模式定義   所謂聚合是:指一組物件的組合結構,比如:Java中的集合、陣列等。 (2)應用迭代器模式來解決的思路      

研磨設計模式 之 直譯器模式(Interpreter)2——跟著cc設計系列

21.2  解決方案 21.2.1  直譯器模式來解決 用來解決上述問題的一個合理的解決方案,就是使用直譯器模式。那麼什麼是直譯器模式呢? (1)直譯器模式定義          這裡的文法,簡單點說就是我們俗稱的“語法規則”。 (2)應用直譯器模式來解決的思

研磨設計模式 之 代理模式(Proxy)3——跟著cc設計系列

11.3  模式講解 11.3.1  認識代理模式 (1)代理模式的功能 代理模式是通過建立一個代理物件,用這個代理物件去代表真實的物件,客戶端得到這個代理物件過後,對客戶端沒有什麼影響,就跟得到了真實物件一樣來使用。        當客戶端操作這個代理物件的時候,實際上功

研磨設計模式 之 代理模式(Proxy)1——跟著cc設計系列

11.1  場景問題 11.1.1  訪問多條資料        考慮這樣一個實際應用:要一次性訪問多條資料。        這個功能的背景是這樣的;在一個HR(人力資源)應用專案中客戶提出,當選擇一個部門或是分公司的時候,要把這個部門或者分公司下的所有員工都顯示出來,而且

相關模式辨析——研磨設計模式——跟著cc設計系列

裝飾模式與策略模式 這兩個模式可以組合使用。 策略模式也可以實現動態的改變物件的功能,但是策略模式只是一層選擇,也就是根據策略選擇一下具體的實現類而已。而裝飾模式不是一層,而是遞迴呼叫,無數層都可以,只要組合好裝飾器的物件組合,那就可以依次呼叫下去,所以裝飾模式會更靈活。 而且策略模式改變的是原始物件的功能

簡單工廠——研磨設計模式——跟著cc設計系列

介面回顧 1:Java中介面的概念 在Java中介面是一種特殊的抽象類 2:介面用來幹什麼 通常用介面來定義實現類的外觀,就相當於一份契約,根據外部應用需要的功能,約定了實現類應該要實現的功能 3:介面的思想 ——“封裝隔離” 4:使用介面的好處 只要介面不變,內部實現的變化就不會影響到外部應用,從而使得系

職責鏈模式——研磨設計模式——跟著cc設計系列

使用模式來解決的思路 仔細分析上面的場景,當客戶端提出一個聚餐費用的申請,後續處理這個申請的物件,專案經理、部門經理和總經理,自然的形成了一個鏈,從專案經理à部門經理à總經理,客戶端的申請請求就在這個鏈中傳遞,直到有領導處理為止。看起來,上面的功能要求很適合採用職責鏈來處理這個業務。 要讓處理請求的流程可靈

原型模式——研磨設計模式——跟著cc設計系列

不用模式的解決方案 存在的問題 雖然上面的實現,通過簡單工廠解決解決了:對於裝機工程師,只知CPU和主機板的介面,而不知道具體實現的問題。但還有一個問題沒有解決,什麼問題呢?那就是這些CPU物件和主機板物件其實是有關係的,是需要相互匹配的。 n使用模式的解決方案 先來看看如何使用抽象工廠模式來解決前面提出的

工廠方法模式——研磨設計模式——跟著cc設計系列

認識工廠方法模式 1:工廠方法模式的功能 工廠方法的主要功能是讓父類在不知道具體實現的情況下,完成自身的功能呼叫,而具體的實現延遲到子類來實現。 2:實現成抽象類 工廠方法的實現中,通常父類會是一個抽象類,裡面包含建立所需物件的抽象方法,這些抽象方法就是工廠方法 3:實現成具體的類 也可以把父類實現成為一個

抽象工廠模式——研磨設計模式——跟著cc設計系列

AbstractFactory: 抽象工廠,定義建立一系列產品物件的操作介面。 ConcreteFactory: 具體的工廠,實現抽象工廠定義的方法,具體實現一系列產品物件的建立。 AbstractProduct: 定義一類產品物件的介面。 ConcreteProduct: 具體的產品實現物件,通常在具體工

研磨設計模式 之 觀察者模式(Observer) 3——跟著cc設計系列

12.3  模式講解 12.3.1  認識觀察者模式 (1)目標和觀察者之間的關係        按照模式的定義,目標和觀察者之間是典型的一對多的關係。        但是要注意,如果觀察者只有一個,也是可以的,這樣就變相實現了目標和觀察者之間一對一的關係,這也使得在處理一

跟著cc設計 私塾線上學習網 http://sishuok.com

《研磨設計模式》——跟著CC學設計,視訊課程在 私塾線上 上線啦! 想學習設計模式的朋友可以前去看看。 本視訊課程是北京Java私塾原創精品書籍《研磨設計模式》一書的配套學習視訊,由《研磨設計模式》的第一作者CC錄製 軟體開發越來越複雜,對軟體設計的要求也越來越高,而

跟著專案設計模式(九) 裝飾器模式

接上文,既然一個服務有多個消費者,在具體的功能實現上,會遇到許多有細微差別的地方,比如: 對商品的修改有些服務需要簡訊通知後臺管理員,有些服務需要通過郵件+站內訊息的形式通知相關使用者,有些服務要求無需任何通知操作。 為了能相容這些矛盾,我們嘗試去新增相應的介面如下: public

跟著別人設計模式-----(一)單例模式詳解

    作者:zuoxiaolong8810(左瀟龍),轉載自:http://www.cnblogs.com/zuoxiaolong/p/pattern2.html             上一章

跟著專案設計模式(五):簡單工廠+單例模式+靜態類+延遲載入

接上文,專案交付之後,我們的類庫開發人員發現自己穿越了,回到【設計模式——2、簡單工廠模式】這篇文章所在時間線的最末尾。 由於穿越所造成的蝴蝶效應,這個專案後期雖然確實需要擴充套件,但是隻是要增加五到六個產品類,並要求儘快交付,以便將關注點放到其他更有價值的專案中去,那趕快