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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式-Decorator模式

發布時間:2025/6/17 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-Decorator模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一個例子(貪玩藍月)
  • 傳統繼承實現
  • 裝飾器模式實現
  • 對比
  • 總結

Decorator(裝飾器)模式屬于結構型模式。
比如當其需要三種不同的附加特性,可以為其創建三個派生類。但是若它還需要同時具有其中兩種特性或者是各種特性的任意組合的時候,類繼承的方法就不再適合了。
它允許向一個現有的對象不通過繼承來添加新的功能,同時又不改變其結構。

一個例子(貪玩藍月)

前一陣子張家輝代言的《貪玩藍月》廣告火了,“我系喳喳輝,是兄弟就來砍我~”被洗腦到現在,正好用這個游戲來解釋一下裝飾器模式。

玩游戲的人都知道這種類傳奇的游戲核心玩法就是買裝備,打怪,升級,買裝備這樣反復。

剛注冊賬號進入游戲的玩家假設只有一條大褲衩,價值5金幣,隨著刷怪升級,身上的裝備也在一件件增多,這時候我們需要知道身上的裝備價值多少金幣。

定義玩家

public interface Gamer {/*** 獲取目前的裝備* @return*/String getEquip();/*** 獲取目前身上裝備的價格* @return*/int getPrice(); }

定義具體的法師職業玩家

public class MasterGamer implements Gamer {/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return "大褲衩";}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return 5;} }

新法師玩家出門只有大褲衩,裝備全靠打。

傳統繼承實現

裝備“法師權杖”

public class TruncheonMasterGamer extends MasterGamer{/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return super.getEquip()+",法師權杖";}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return super.getPrice()+50;} }

繼續裝備“魔法斗篷”

public class CloakTruncheonMasterGamer extends TruncheonMasterGamer{/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return super.getEquip()+",魔法斗篷";}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return super.getPrice()+80;} }

注意,這里是在之前已經裝備了“法師權杖”之上去繼承。

計算裝備價格

CloakTruncheonMasterGamer gamer = new CloakTruncheonMasterGamer(); System.out.println("當前裝備:"+gamer.getEquip()+"\n裝備總價值:"+gamer.getPrice());

輸出結果

當前裝備:大褲衩,法師權杖,魔法斗篷 裝備總價值:135

裝飾器模式實現


聲明通用裝飾器基類“裝備”

public abstract class Equip implements Gamer {private Gamer gamer;public Equip(Gamer gamer) {this.gamer = gamer;}/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return gamer.getEquip();}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return gamer.getPrice();} }

具體裝飾器“法師權杖”

public class Truncheon extends Equip {public Truncheon(Gamer gamer) {super(gamer);}/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return super.getEquip()+",法師權杖";}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return super.getPrice()+50;} }

具體裝飾器“魔法斗篷”

public class Cloak extends Equip {public Cloak(Gamer gamer) {super(gamer);}/*** 獲取目前的裝備** @return*/@Overridepublic String getEquip() {return super.getEquip()+",魔法斗篷";}/*** 獲取目前身上裝備的價格** @return*/@Overridepublic int getPrice() {return super.getPrice()+80;} }

計算裝備價格

//創建一個法師玩家 Gamer gamer = new MasterGamer(); //給法師玩家裝備法師權杖 gamer = new Truncheon(gamer); //給法師玩家裝備魔法斗篷 gamer = new Cloak(gamer); System.out.println("當前裝備:"+gamer.getEquip()+"\n裝備總價值:"+gamer.getPrice());

輸出結果

當前裝備:大褲衩,法師權杖,魔法斗篷 裝備總價值:135

對比

上面例子比較簡單,傳統繼承實現和裝飾器模式實現區別不是很明顯,但仔細思考還是會發現一些區別:

  • 傳統繼承實現不自由,沒有“組件化”特性。玩家的裝備是可以隨意組合,隨意拆卸的,而這種特性對于繼承來說只能通過各種各樣的子類組合來實現。就像上面的例子,裝備“法師權杖”和“魔法斗篷”需要在擁有“法師權杖”的基礎上再去繼承。
  • 裝飾器模式實現,使得附屬屬性和主體分開,而又不單獨存在(Equip類里面聲明了Gamer對象)。裝備和玩家是分開的,可以給玩家單獨裝備任何裝備,也可以隨意卸下裝備。

總結

這種設計模式下不僅可以擴展一個類的功能,也可以動態增加功能,動態撤銷。但缺點就是多層裝飾使用起來相對比較復雜。本質是將具體功能職責劃分(例如區分核心組件以及附加屬性職責)減少子類直接繼承父類的耦合性。


你可以在這里獲取相關代碼:設計模式-Decorator模式

轉載于:https://www.cnblogs.com/xuxiaojian/p/11468734.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

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

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

主站蜘蛛池模板: 三级全黄做爰龚玥菲在线 | 91精品国产一区二区三区蜜臀 | 奇米精品一区二区三区四区 | 中日韩精品在线 | 成年人网站av | 强乱中文字幕av一区乱码 | 国产a区| 美女主播福利视频 | 亚洲激情自拍偷拍 | 在线观看国产亚洲 | 久久午夜场 | 久久99精品久久久久子伦 | 娇妻被肉到高潮流白浆 | 夜夜久久久 | 亚洲精品国产熟女久久久 | 久久中文字幕一区 | 欧美一区二区三区免费 | 99在线精品视频免费观看软件 | 香蕉网站视频 | 好吊一区二区三区 | 免费黄色小说视频 | 中文字幕第4页 | 我会温柔一点的日剧 | 亚洲色图网友自拍 | 国产av一区二区三区最新精品 | 视色影视 | 91av在| 日本69式三人交 | 91精品国产综合久久久蜜臀九色 | 国产精品老牛影视 | 欧美日韩亚洲国产另类 | 国产精品日日夜夜 | 狠狠摸狠狠操 | 欧美精品一二三 | 日本偷拍一区 | 女人色极品影院 | 国产不卡一区二区视频 | 超级碰碰97 | 日本青青草 | 久久最新| 国产精品久久久久久网站 | www.youjizz.com视频 | 国产精品毛片一区二区三区 | 亚洲免费精品视频在线观看 | 黄色在线观看网址 | 很污的网站 | 亚洲av无码一区二区二三区软件 | 欧美精品电影一区二区 | 日本毛片视频 | 三级欧美韩日大片在线看 | 欧美久久久久久久 | 亚洲精品久久久久久宅男 | 按摩ⅹxxx性hd中国 | 精品三级在线观看 | 国产高清视频免费在线观看 | 精品少妇一区二区三区密爱 | 日韩在线视频网 | 中文字幕素人 | 黄色在线播放 | 日日操日日| 国产欧美日韩综合精品一区二区三区 | 国产精品福利一区二区三区 | 欧美极品少妇xxxxⅹ猛交 | 久久婷婷热 | 国产av成人一区二区三区高清 | 伊人色在线视频 | 四虎午夜| 久久久精品影视 | 欧美日韩免费观看视频 | 亚洲成人一级 | 四虎影院永久 | 欧美黑人添添高潮a片www | 国产成人精品网 | 成人av免费在线看 | 国产又粗又黄又爽又硬的视频 | 日本成人三级电影 | 国产精品com | 欧美日韩在线a | 苍井空亚洲精品aa片在线播放 | caopor在线视频 | 欧美激情影音先锋 | 色片网站在线观看 | 国产乱淫av片杨贵妃 | 加勒比精品 | 欧美激情国产在线 | 香蕉视频污视频 | 国产乱人对白 | 很很干很很日 | 91毛片在线观看 | 国产亚洲美女精品久久久2020 | 亚洲美女视频一区 | 精品人妻一区二区三区蜜桃视频 | 色漫在线观看 | 久久福利免费视频 | 国产亚洲精品久久久久久久久动漫 | 亚洲欧美日韩国产一区二区 | 国产高潮久久久 | 蜜芽在线视频 | 久久精品—区二区三区舞蹈 |