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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式(10)-装饰模式详解(易懂)

發布時間:2025/3/21 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式(10)-装饰模式详解(易懂) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

裝飾模式的定義

裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

模型:

  • Component:抽象組件,是一個接口或者抽象類;就是定義的最原始的對象
  • ConcreteComponent:具體組件,實現類(需要裝飾)
  • Decorator:裝飾角色,一般是抽象類,實現接口;它的屬性必然有個private變量指向Conponent抽象組件
  • ConcreteDecorator:具體的裝飾對象

實例說明

舉個例子:比如一個正在上高中的學生“小明”在考完試后,和父母說想買一款5000元的手機。

1.Component,抽象方法-買手機

public abstract class AbstractBuyPhone {//主要是向父母提出想買手機的意向public abstract void BuyPhone();//父母是否同意public abstract void Agree(); }

2.ConcreteComponent:具體的意向

public class XiaoMingBuyPhone extends AbstractBuyPhone {@Overridepublic void BuyPhone() {Log.d("qzs","我想買一款華為的5000元的手機");}@Overridepublic void Agree() {Log.d("qzs","父母同意了");} }

3.Decorator,增加一個裝飾抽象類,方便修飾

public class AbstractDecorator extends AbstractBuyPhone {private AbstractBuyPhone abstractBuyPhone;public AbstractDecorator ( AbstractBuyPhone abstractBuyPhone){this.abstractBuyPhone=abstractBuyPhone;}@Overridepublic void BuyPhone() {this.abstractBuyPhone.BuyPhone();}@Overridepublic void Agree() {this.abstractBuyPhone.Agree();} }

4.ConcreteDecorator:如果直接去找父母要手機,很容易被拒絕,所以需要修飾一下,這里用成績修飾一下

public class ScoreDecortator extends AbstractDecorator {public ScoreDecortator(AbstractBuyPhone abstractBuyPhone) {super(abstractBuyPhone);}//先和父母說說自己的成績private void ShowScore(){Log.d("qzs","我這次考試的成績年級前三,又進步了");}//重寫買手機的方法,先匯報成績,然后再提買手機的事情@Overridepublic void BuyPhone() {this.ShowScore();super.BuyPhone();} }

5.調用,也就是請求父母:

AbstractBuyPhone str;//小明的原本意向str=new XiaoMingBuyPhone();//修飾后的意向str=new ScoreDecortator(str);//向父母提出想法(成績和買手機)str.BuyPhone();//父母同意了str.Agree();

運行結果:

強調:這里只加了分數的修飾,可以加多個修飾類來滿足你最后的目的

裝飾模式的優缺點及其他

1.優點

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

2.缺點

  • 這種比繼承更加靈活機動的特性,也同時意味著更加多的復雜性。
  • 裝飾模式會導致設計中出現許多小類,如果過度使用,會使程序變得很復雜。
  • 裝飾模式是針對抽象組件(Component)類型編程。但是,如果你要針對具體組件編程時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變Component接口,增加新的公開的行為,實現“半透明”的裝飾者模式。在實際項目中要做出最佳選擇。

3.適用場景

  • 需要擴展一個類的功能,或給一個類添加附加職責。
  • 需要動態的給一個對象添加功能,這些功能可以再動態的撤銷。

定義和優缺點來自網上百度信息


另外可以加入我的Android技術交流群:458739310
大家可以關注我的微信公眾號:「安卓干貨鋪」一個有質量、有態度的公眾號!

總結

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

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