日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之装饰者模式(一)

發布時間:2024/1/17 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之装饰者模式(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經過前兩個模式的學習,是不是對設計模式有了進一步的認識了呢,現在,我們繼續沖鴨。

本章可以稱為“給愛用繼承的人一個全新的設計眼界”。這里我們即將再度探討典型的繼承濫用問題,我們將學到如何使用對象組合的方式,做到在運行時裝飾類。為什么呢?一旦熟悉了裝飾的技巧,你將能夠在不修改任何底層代碼的情況下,給對象賦予新的職責。

之前我們見識了鴨子的各個表現會飛、會游泳、會叫、會跳;也看過了氣象臺實時更新的能力,在看板里把數據更新;接下來我們一起來喝下咖啡,體驗一把喝咖啡的樂趣。咖啡店里的生意太好了,需要升級現有的產品,所以店主準備更新訂單系統,以此來滿足店內各位顧客。

先來看一張圖,這是原先的店內設計

看出什么來了嗎?沒錯,就是各個類來滿足對咖啡的不同要求。那么,如果店內產品需要升級,比如購買咖啡時,想加入各種調料,例如:蒸奶,豆漿,摩卡或者覆蓋奶泡。咖啡店根據不同的調料,收取不同的費用,所以有多少種調料,就有多少種類,是這個意思沒錯吧。然后,就會很悲劇,請看下面擴展調料之后的圖

我的天,這是啥,這要是寫了這樣的項目,還不是分分鐘要被哭死,維護這么多的類。

認識裝飾者模式

當前遇到的問題就是:類數量爆炸、設計死板、以及基類加入的新功能并不適用于所有的子類。

所以,裝飾者要隆重出場。在這里要采用不一樣的做法:我們要以飲料為主體,然后再運行試以調料來“裝飾”(decorate)飲料。加入某個顧客想要摩卡和奶泡深培咖啡,那么具體的做法就可以是:

  • 拿一個深培咖啡(DarkRoast)對象
  • 以摩卡(Mocha)對象裝飾它
  • 以奶泡(Whip)對象裝飾它
  • 調用cost方法,并依賴委托(delegate)將調料的價錢加上去
  • 以裝飾者構造飲料訂單

    為了讓讀者更加清晰的了解,小編在這里直接給了書中的圖來表示

    根據以上信息,我們知道

    • 裝飾者和被裝飾對象有相同的超類型
    • 你可以用一個或多個裝飾者包裝一個對象
    • 既然裝飾者和被裝飾對象有相同的超類型,所以在任何需要原始對象(被包裝的)的場合,可以用裝飾過的對象代替它
    • 裝飾者可以在所委托被裝飾者的行為之前/或之后,加上自己的行為,以達到特定的目的---關鍵點
    • 對象可以在任何時候被裝飾,所以可以再運行時動態地、不限量地用你喜歡的裝飾者來裝飾對象

    來看看裝飾者模式的定義吧。

    定義裝飾者模式

    裝飾者模式動態地將責任附加到對象上。若要擴展功能呢,裝飾者提供了比繼承更有彈性的替代方案。

    那么我們如何在現實中實際應用裝飾者模式呢,先來看看根絕角色來分配的類圖

    裝飾我們的飲料

    從上面的類圖,看出什么了嗎?想到我們的飲料的類圖怎么畫了沒呢。接下來,就讓我們照貓畫虎,來畫一個屬于我們的裝飾類類圖

    鑒于之前有讀者反映,說出現篇幅過長的情況。小編自己也曾疑惑,到底怎么更好地控制篇幅。所以,從今天開始,小編在力爭保持思路一慣性的條件下,模塊分的更細致,篇幅更加適中,讓碎片化時間得到充分的利用。

    所以,今天的學習就先到這里啦。下一篇,會針對類圖進行實際的代碼編寫以及其他補充性的情況。大家也可以先根據代碼,在偽代碼的世界里實踐下,也利于咱們下次的編碼實戰。

    PS:代碼已經上傳,需要查看的朋友點擊此處HeadFirstDesign

    愛生活,愛學習,愛感悟,愛挨踢

    轉載于:https://juejin.im/post/5ca417a06fb9a05e6d61ad1b

    總結

    以上是生活随笔為你收集整理的设计模式之装饰者模式(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。