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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第 6 章 —— 装饰模式

發(fā)布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第 6 章 —— 装饰模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

6.6 裝扮模式總結

    裝飾模式把每個要裝飾的功能放在單獨的類中,并讓這個類包裝它所要裝飾的對象,因此,當需要執(zhí)行特殊行為時,客戶端代碼就可以在運行時根據(jù)需要有選擇地、按順序地使用裝飾功能包裝對象了。

    裝扮模式是為已有功能動態(tài)地添加更多功能的一種方式。

  裝飾模式的優(yōu)點:

    有效地把類的核心職責和裝飾功能區(qū)分開了(將裝飾功能從類中移除,簡化了原有的類)。而且可以去除相關類中重復的裝飾邏輯(具體的裝飾類都繼承了抽象裝飾類)。

  需要注意的問題:

    裝飾模式的順序很重要,比如加密數(shù)據(jù)和過濾詞匯都可以是數(shù)據(jù)持久化(存儲)以前的裝飾功能,但若先加密了數(shù)據(jù)再用過濾功能就會出問題了,最理想的情況,是保證裝飾類之間彼此獨立,這樣它們就可以以任意的順序進行組合了。

6.4 裝飾模式

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

基本的實現(xiàn)代碼:

  Component 類:

  abstract class Component{public abstract void Operation();}

    Component 定義了一個對象接口(抽象類的抽象方法),可以給這些對象動態(tài)地添加職責。

  ConcreteComponent 類:

  class ConcreteComponent : Component{public override void Operation(){Console.WriteLine("具體對象的操作");}}

    ConcreteComponent定義了一個具體的對象,也可以給這個對象添加一些職責。

  Decorator 類:(抽象的裝飾類,需要繼承定義的對象接口)

  abstract class Decorator : Component{protected Component component;public void SetComponent(Component component) //設置Component   {this.component = component;}public override void Operation() //重寫Operation(),實際執(zhí)行的是Component的Operation()   {if(component != null){component.Operation();}}}

    Decorator,抽象裝飾類,繼承了?Component,從類外面來擴展?Component 類的功能,但對于?Component 來說,是無需知道?Decorator 的存在的

  具體的裝飾類:

  class ConcreteDecoratorA : Decorator{private string addedState; //本類的獨有功能,以區(qū)別于ConcreteDecoratorBpublic override void Operation(){base.Operation(); //首先運行原Component的Operation(),再執(zhí)行本類的功能,如addedState,相當于對原Component進行了裝飾addedState = "New State";Console.WriteLine("具體裝飾對象A的操作");}}class ConcreteDecoratorB : Decorator{public override void Operation(){base.Operation(); //首先運行原Component的Operation(),再執(zhí)行本類的功能,AddBehavitor(),相當于對原Component進行了裝飾   AddBehavitor();Console.WriteLine("具體裝飾對象A的操作");}private void AddBehavitor() //本類獨有的方法,以區(qū)別于ConcreteDecoratorA   {}}

  客戶端代碼:

static void Main(string[] args){ConcreteComponent c = new ConcreteComponent();ConcreteDecoratorA d1 = new ConcreteDecoratorA();ConcreteDecoratorB d2 = new ConcreteDecoratorB();d1.SetComponent(c);d2.SetComponent(d1);d2.Operation(); //裝飾的方法是:首先用ConcreteComponent實例化對象c,然后用ConcreteDecoratorA的實例化對象d1來包裝c,再用ConcreteDecoratorB的對象d2包裝d1,最終執(zhí)行d2的Operation() Console.Read();}

6.5 裝飾模式的實際應用

  “Person” 類(ConcreteComponent)

  class Person{public Person(){ }private string name;public Person(string name){this.name = name;}public virtual void Show(){Console.WriteLine("裝扮的{0}", name);}}

  服飾類(Decorator)

  class Finery : Person{protected Person component;//打扮public void Decorate(Person component){this.component = component;}public override void Show(){if(component != null){component.Show();}}}

  具體服飾類(ConcreteDecorator)

class TShirts : Finery{public override void Show(){Console.WriteLine("大T恤 ");base.Show();}}class BigTrouser : Finery{public override void Show(){Console.WriteLine("垮褲 ");base.Show();}}

  客戶端代碼

static void Main(string[] args){Person xc = new Person("小菜");Console.WriteLine("\n第一種裝扮:");BigTrouser kk = new BigTrouser(); //垮褲TShirts dtx = new TShirts(); //大T恤 kk.Decorate(xc); //裝扮過程 dtx.Decorate(kk);dtx.Show();Console.Read();}

?

轉載于:https://www.cnblogs.com/zhangchaoran/p/8538062.html

總結

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

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