亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 設計模式系列教程-裝飾模式

2020-01-24 01:08:24
字體:
來源:轉載
供稿:網友

1. 概述

  動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。

  原理:增加一個修飾類包裹原來的類,包裹的方式一般是通過在將原來的對象作為修飾類的構造函數的參數。裝飾類實現新的功能,但是,在不需要用到新功能的地方,它可以直接調用原來的類中的方法。修飾類必須和原來的類有相同的接口。

2. 模式中的角色

  2.1 抽象構建(Component):定義一個抽象接口,用以給這些對象動態地添加職責。

  2.2 具體構建(ConcreteComponent):定義一個具體的對象,也可以給這個對象添加一些職責。

  2.3 裝飾類(Decorator): 裝飾抽象類,繼承了Component,從外類來擴展Component類的功能。

  2.4 具體裝飾者(ConcretorDecorator):負責給構建對象添加職責。

3. 模式解讀

  3.1 裝飾模式的一般化類圖

http://files.VeVB.COm/file_images/article/201606/2016060111392629.png

  3.2 裝飾模式的一般化代碼

 /// <summary> /// 定義一個對象接口,可以給這些對象動態地添加職責 /// </summary> public abstract class Component {  public abstract void Opration(); } /// <summary> /// 具體對象 /// </summary> public class ConcreteComponent:Component {  public override void Opration()  {   // 具體對象的操作  } } /// <summary> /// 抽象的裝飾類,它不能初始化對象。 /// </summary> public abstract class Decorator:Component {  protected Component component;  /// <summary>  /// 設置Component  /// </summary>  /// <param name="component"></param>  public void SetComponent(Component component)  {   this.component = component;  }  /// <summary>  /// 重寫Operation,實際執行的是Component的Operation。  /// </summary>  public override void Opration()  {   if (component != null)   {    component.Opration();   }  } } public class ConcreteDecoratorA : Decorator {  private void SpecialOpration()  {   // 本類特有的功能  }  public override void Opration()  {   //首先運行原Component的Operation(),在執行本類的功能,相當于對原Component進行了裝飾   base.Opration();   this.SpecialOpration();  } } public class ConcreteDecoratorB : Decorator {  private void SpecialOprationA()  {   // 本類特有的功能 A  }  private void SpecialOprationB()  {   // 本類特有的功能 B  }  public override void Opration()  {   //首先運行原Component的Operation(),在執行本類的功能,相當于對原Component進行了裝飾   base.Opration();   this.SpecialOprationA();   this.SpecialOprationB();  } }

4. 模式總結

  4.1 優點

    4.1.1 每個裝飾對象只關心自己的功能,不需要關心如何被添加到對象鏈當中。它是由Decorator的SetComponent方法來實現的,因而它們的職責是單一的。

    4.1.2 類的核心職責與動態添加的職責是分離的。如果再向主類中添加新的功能,一是違反了開放封閉原則,二是增加了主類的復雜度。

    4.1.3 比靜態繼承更靈活 與對象的靜態繼承相比,Decorator模式提供了更加靈活的向對象添加職責的方式,可以使用添加和分離的方法,用裝飾在運行時刻增加和刪除職責.

  4.2 缺點

    4.2.1 產生許多小對象,采用Decorator模式進行系統設計往往會產生許多看上去類似的小對象,這些對象僅僅在他們相互連接的方式上有所不同。

  4.3 適用場景

    4.3.1 當需要為已有功能動態地添加更多功能時。

    4.3.2 類的核心功能無需改變,只是需要添加新的功能時。

5. 應用實例:裝備大兵!無任何裝備時(核心功能)可以用拳腳搏擊;裝備了步槍,可以正常射擊;裝備了重機槍,可以掃射;裝備了火箭筒,可以防空。

  5.1 類圖設計

http://files.VeVB.COm/file_images/article/201606/2016060111392632.png

  5.2 代碼實現

 /// <summary> /// 裝備類,相當于Component /// </summary> public abstract class Equipment {  public abstract void Attack(); } /// <summary> /// 士兵類,繼承自Equipment /// </summary> public class Soldier : Equipment {  public Soldier()  {   // 構造函數  }  /// <summary>  /// 沒有任何武器裝備下的核心功能  /// </summary>  public override void Attack()  {   Console.WriteLine("用拳腳攻擊!");  } } public abstract class EquipDecorator : Equipment {  protected Equipment equipment;  /// <summary>  /// 增加裝備,使用該方法來動態地給士兵增加裝備  /// </summary>  /// <param name="equipment"></param>  public void SetComponent(Equipment equipment)  {   this.equipment = equipment;  }  /// <summary>  /// 攻擊  /// </summary>  public override void Attack()  {   //如果有裝備,就用裝備進行攻擊   if (equipment != null)   {    equipment.Attack();   }  } } /// <summary> /// 步槍 /// </summary> public class RifleEquipment : EquipDecorator {  public override void Attack()  {   base.Attack();   Console.WriteLine("步槍射擊,啪!");  } } /// <summary> /// 機槍 /// </summary> public class MachineGunEquipment : EquipDecorator {  public override void Attack()  {   base.Attack();   Console.WriteLine("機槍掃射,突突突!");  } } /// <summary> /// 火箭筒 /// </summary> public class RocketGunEquipment : EquipDecorator {  public override void Attack()  {   base.Attack();   Console.WriteLine("火箭炮射擊,唰......!");  } }

  5.3 客戶端調用

 class Program {  static void Main(string[] args)  {   // 定義新兵   Soldier soldier = new Soldier();   // 三種裝備   RifleEquipment rifle = new RifleEquipment();   MachineGunEquipment machineGun = new MachineGunEquipment();   RocketGunEquipment rocketGun = new RocketGunEquipment();   // 將三種裝備全部交給新兵   rifle.SetComponent(soldier);   machineGun.SetComponent(rifle);   rocketGun.SetComponent(machineGun);   // 攻擊,除了拳腳功夫外,新兵還可以使用步槍,機槍,火箭炮.最終執行的是rocketGun.Attack().   rocketGun.Attack();   Console.Read();  } }

  5.4 運行結果

  用拳腳攻擊!
  步槍射擊,啪!
  機槍掃射,突突突!
  火箭炮射擊,唰......!

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美乱大交xxxxx另类电影| 午夜精品在线观看| 欧美电影免费在线观看| 国产精品久久久久久久久久东京| 精品成人av一区| 在线成人中文字幕| 国产精品久久久久aaaa九色| 国产一区二区三区久久精品| 成人动漫网站在线观看| 欧美精品日韩www.p站| 久久精品久久久久电影| 九九热精品在线| 欧美精品一区二区三区国产精品| 日韩精品中文在线观看| www.久久久久| 欧美黄色小视频| 91在线观看欧美日韩| 亚洲精品免费网站| 精品久久久久久久久久国产| 日韩av影片在线观看| 国内成人精品视频| 最近2019中文字幕在线高清| 亚洲第一福利在线观看| 日韩精品在线视频观看| 亚洲xxxx在线| 欧美精品免费在线观看| 亚洲国产精品电影| 亚洲精品动漫久久久久| 精品视频一区在线视频| 日本精品一区二区三区在线| 日韩中文字幕不卡视频| 亚洲欧洲在线免费| 国产一区二区丝袜高跟鞋图片| 国产视频久久久久| 国产一区二区黑人欧美xxxx| 欧美xxxx18性欧美| 精品国产区一区二区三区在线观看| 日韩av一卡二卡| 57pao国产成人免费| 一夜七次郎国产精品亚洲| 日韩av最新在线观看| 国产日韩精品视频| 亚洲精品理论电影| 国产精品久久久久久av下载红粉| 国产欧美最新羞羞视频在线观看| 久久久久久久久久久网站| 成人妇女淫片aaaa视频| 奇米四色中文综合久久| 精品一区二区三区电影| 国产亚洲欧美日韩精品| 日本亚洲欧洲色| 青青草原一区二区| 亚洲free性xxxx护士hd| 国产福利视频一区| 亚洲成人亚洲激情| 992tv在线成人免费观看| 精品久久久久久电影| 欧美国产日韩一区二区在线观看| 成人免费淫片aa视频免费| 亚洲自拍在线观看| 一本色道久久综合亚洲精品小说| 久久久久久香蕉网| 日韩大片免费观看视频播放| 黑人与娇小精品av专区| 日韩中文字幕视频在线| 97在线精品国自产拍中文| 午夜精品久久久久久久男人的天堂| 欧美日韩精品二区| 欧美日韩国产在线看| 国产精品视频地址| 欧美主播福利视频| 亚洲a中文字幕| 亚洲精品一区二区三区不| 欧美老女人www| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美综合精品久久成人| 成人精品在线观看| 欧美影院久久久| 精品一区二区三区四区在线| 在线日韩第一页| 欧美亚洲另类在线| www.xxxx欧美| 一本久久综合亚洲鲁鲁| 亚洲视频axxx| 精品久久久久久中文字幕一区奶水| 欧美午夜视频在线观看| 国产97在线播放| 亚洲欧美中文日韩在线v日本| 日韩在线视频免费观看高清中文| 久久视频在线播放| 亚洲欧美日韩国产中文专区| 日韩精品在线免费观看视频| 91免费看片网站| 国产精品一区专区欧美日韩| 国产精品中文在线| 久久精品在线视频| 国产精品av免费在线观看| 欧美肥婆姓交大片| 亚洲人成电影在线| 亚洲韩国欧洲国产日产av| 国产欧美日韩综合精品| 国语自产精品视频在线看一大j8| 国模叶桐国产精品一区| 热99精品只有里视频精品| 久久香蕉频线观| 97久久精品在线| 成人a级免费视频| 亚洲国产欧美日韩精品| 亚洲综合日韩中文字幕v在线| 尤物99国产成人精品视频| 亚洲专区在线视频| 国产欧美日韩中文| 国产精品久久久久久久久久久不卡| 狠狠躁18三区二区一区| 久久精品在线播放| 中文国产成人精品| 亚洲国产精品va在线看黑人动漫| 欧美日本在线视频中文字字幕| 久久久欧美精品| 91在线播放国产| 日韩美女主播视频| 亚洲欧美日韩视频一区| 中文字幕最新精品| 久久激情五月丁香伊人| 国产成人涩涩涩视频在线观看| 国产a∨精品一区二区三区不卡| 久久影视电视剧免费网站清宫辞电视| 久久久极品av| 亚洲欧美色图片| 欧美性少妇18aaaa视频| 国产在线精品播放| 992tv成人免费视频| 亚洲黄页网在线观看| 中文欧美日本在线资源| 日韩av理论片| 欧美最近摘花xxxx摘花| 日韩欧美国产免费播放| 黄网站色欧美视频| 亚洲自拍小视频免费观看| 九九久久久久久久久激情| 欧美日韩国产成人在线观看| 欧美裸身视频免费观看| 欧美一级高清免费播放| 国产中文字幕91| 91精品国产综合久久香蕉的用户体验| 69**夜色精品国产69乱| 欧美性猛交xxxx乱大交3| 这里只有精品视频在线| 亚洲专区中文字幕| 成人久久久久久久| 在线国产精品播放| 国产在线999| 亚洲精品成人免费| 久久91精品国产91久久久| 国产一区二区丝袜| 国产日韩在线看片| 国产美女久久久| 日韩在线视频播放| 国产精品美女呻吟| 亚洲人成绝费网站色www| 亚洲已满18点击进入在线看片| 欧美成人午夜免费视在线看片| 欧美激情欧美激情在线五月| 亚洲第一免费网站|