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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

『设计模式』小伙你的穿搭很潮!--装饰者模式

發布時間:2023/12/15 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『设计模式』小伙你的穿搭很潮!--装饰者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

23種設計模式+額外常用設計模式匯總 (持續更新)

裝飾模式(Decorator):又名包裝模式。裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案。
裝飾模式常常被稱為包裹模式,就是因為每一個具體裝飾類都將下一個具體裝飾類或者具體構成類包裹起來。

包含角色

  • 抽象構成(Component)角色
    給出一個抽象接口,以規范準備接收附加責任的對象。
  • 具體構成(Concrete Component)角色
    實現組件對象接口,通常就是被裝飾器裝飾的對象。
  • 裝飾(Decorator)角色
    持有一個構件(Component)對象的實例,并定義一個與抽象構件接口一致的接口。
  • 具體裝飾(Concrete Decorator)角色
    負責給構件對象“貼上”附加的責任

特點

  • 裝飾模式為對象添加額外責任的方式就像做蛋糕一樣,一圈一圈的加上去,中間的面包是核心,是被裝飾的對象,是核心任務,外圍的都是裝飾對象。
  • 這就是說裝飾模式包含兩部分內容,即裝飾獨享和被裝飾對象。
  • 按照GOF的說法,Decorator模式的意圖是:動態的給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。
  • 這個被裝飾的對象不一定是最原始的那個對象,也可能是被其他裝飾器裝飾過的對象,反正都是實現的同一接口,也就是同一類型。
  • Decorator模式的效果是:讓我們可以創建以decorator對象——負責新的功能的對象——開始的一條對象“鏈”,并接受與租出的對象。

Decorator鏈

Decorator1->Decorator2->Decorator3->Concrete Comp

    模式講解

    功能
    能夠實現動態地為對象添加功能,是從一個對象外部來給對象增加功能,相當一是改變了對象的外觀

    對象組合
    Favor Composition Over Inheritance

    裝飾器和組件類的關系
    裝飾器是用來裝飾組件類的關系,裝飾器一定要實現和組件類一致的接口,保證他們是同一個類型,并且具有同一個外觀這樣組合完成的裝飾才能夠遞歸調用下去。

    本質
    動態是手段,組合是目的

    優點

    • 裝飾模式與集成關系的目的都是要擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。
    • 通過使用不同的具體裝飾類似以及這些裝飾類的排列組合,設計師可以創造出很多不同行為的組合。

    缺點

    會產生很多細粒度對象

    裝飾模式與策略模式

    • 策略模式改變的是對象的內核
    • 裝飾模式改變的是對象的外殼
    • 策略模式是一層調用
    • 裝飾模式是遞歸調用
    • 可以有機結合

    裝飾模式與AOP

    • APO(Aspect Qriented Programming)是OOP的延續,意思是面向方面編程。
    • 面向對象開發中,烤爐系統的角度通常是縱向的。
    • AOP的主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等。
    • 主要意圖是:將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務員邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將他們獨立到非知道業務邏輯的方法中,進而改變這些行業的時候不影響業務邏輯的代碼。

    舉例

    實現

    //抽象構件(Component)角色 public abstract class Component {public abstract void operate();//具體構件(ConcreteComponent)角色,被包裝對象 public class ConcreteComponent extends Component {@Overridepublic void operate() {System.out.println("ConcreteComponent 原始對象操作");} } // 裝飾(Decorator)角色: public abstract class Decorator extends Component {private Component component;/*** 構造函數傳遞要裝飾的對象* @param component 被裝飾的對象*/public Decorator(Component component) {this.component = component;}@Overridepublic void operate() {//調用被裝飾者的方法this.component.operate();} }public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void operate() {super.operate();//調用自己的方法this.operateAMethod();}private void operateAMethod() {System.out.println("ConcreteDecoratorA添加的修飾方法");} }public class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}@Overridepublic void operate() {//調用自己的方法this.operateBMethod();super.operate();}private void operateBMethod() {System.out.println("ConcreteDecoratorB添加的修飾方法");} }public class Client {public static void main(String[] args) {//創建原始對象Component component = new ConcreteComponent();//第一次裝飾component = new ConcreteDecoratorA(component);//第二次裝飾component = new ConcreteDecoratorB(component);//兩次裝飾后的操作component.operate();} }

    【問題】 一個人可以搭配不同的服飾:例如,大T恤,垮褲,破球鞋;或者,西裝,領帶,皮鞋。
    【裝飾模式實現代碼】

    using System; namespace Wear {abstract class Component{public abstract void Show();}class Person: Component{private String name;public Person() { }public Person(String name){this.name = name;}public override void Show(){Console.WriteLine("裝飾的{0}", name);}}class Finery : Component{protected Component component;public Finery(Component component){this.component = component;}public override void Show(){if(component!=null){component.Show();}}}class Tshirt:Finery{public Tshirt(Component component) : base(component) { }public override void Show(){Console.Write("大T恤 ");base.Show();}}class BigTrouser : Finery{public BigTrouser(Component component) : base(component) { }public override void Show(){Console.Write("垮褲 ");base.Show();}}class Sneakers : Finery{public Sneakers(Component component) : base(component) { }public override void Show(){Console.Write("破球鞋 ");base.Show();}}class Suit : Finery{public Suit(Component component) : base(component) { }public override void Show(){Console.Write("西裝 ");base.Show();}}class Tie : Finery{public Tie(Component component) : base(component) { }public override void Show(){Console.Write("領帶 ");base.Show();}}class LeatherShoes : Finery{public LeatherShoes(Component component) : base(component) { }public override void Show(){Console.Write("皮鞋 ");base.Show();}}class Program{static void Main(string[] args){Person xc = new Person("小菜");Console.WriteLine("第一種裝扮");Finery dtx = new Tshirt(new BigTrouser(new Sneakers(xc)));dtx.Show();Console.WriteLine("第二種裝扮");Finery sut = new Suit(new Tie(new LeatherShoes(xc)));sut.Show();}} }

    【UML圖】

    總結

    以上是生活随笔為你收集整理的『设计模式』小伙你的穿搭很潮!--装饰者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 黑人巨大精品欧美黑寡妇 | 啪啪日韩 | 一区二区三区精品在线观看 | 93久久精品日日躁夜夜躁欧美 | 日韩一区在线免费观看 | 欧美精品亚洲一区 | 日人视频 | 椎名空在线 | 日韩城人网站 | 婷婷伊人五月天 | 久久综合婷婷国产二区高清 | 国产欧美日韩三级 | 岛国精品一区二区三区 | 国产精品无码一本二本三本色 | 日本www视频在线观看 | 91美女高潮出水 | 国精产品一区一区三区在线 | 国产欧美日韩视频 | 五月婷婷丁香久久 | 无码一区二区三区在线观看 | 野外吮她的花蒂高h在线观看 | 999资源站| 麻豆疯狂做受xxxx高潮视频 | 丁香六月天婷婷 | 亚洲av久久久噜噜噜熟女软件 | 中文字幕一区二区三区四区视频 | 91在线观看视频 | 鲁一鲁在线 | 男女激情免费网站 | 精品免费看| 久久久久久国产精品三级玉女聊斋 | 色妻影院 | 中出精品 | 他趴在我两腿中间添得好爽在线看 | 国产小视频自拍 | 色女人天堂 | 精品人妻无码一区二区三 | 国产乱妇无码大片在线观看 | 日本视频三区 | 日本成人在线不卡 | 成年人在线免费看 | 女人天堂网 | 日欧一级片 | 欧美aaaaaaa| 精品少妇一区二区三区免费观 | 爱爱色图 | 国产污污| 无码人妻精品一区二 | 我要看免费黄色片 | 人人澡人人看 | 无码人妻精品一区二区三区温州 | 爱爱视频网站 | 欧美二级片| 天美乌鸦星空mv | 成色视频| 女攻总攻大胸奶汁(高h) | 久久国产热视频 | 成人av图片 | 欧美在线免费 | 国产亚洲精品成人无码精品网站 | 一区二区小说 | 青青草原综合网 | 日韩av一级片 | 成人亚洲视频 | 成人做爰免费视频免费看 | 欧美黄色三级 | 国产伦精品一区二区三区在线 | 天天谢天天干 | 视频精品一区 | 欧美xxxxx视频 | 一级片免费在线 | 天天综合天天添夜夜添狠狠添 | 1区2区3区视频| av鲁丝一区鲁丝二区鲁丝三区 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 天天干天天插天天射 | 假日游船| 久久久在线 | 亚洲激情片 | 亚洲www视频 | 国产v片| 日韩精品久久久久久久的张开腿让 | 亚洲一级片免费看 | jizzjizz中国精品麻豆 | 成年人av电影 | 国产欧美日韩视频 | 亚洲精品粉嫩小泬20p | jizz视频 | 超碰色偷偷 | 日韩精品在线网站 | 成人免费片库 | 国产中文字幕视频 | 性色av浪潮av | 国产日产亚洲系列最新 | 男人操女人免费视频 | 在线91av| 欧美丰满熟妇xxxxx | 黄色片xxx | 99国产精品免费 |