發(fā)文章
發(fā)文工具
撰寫(xiě)
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
1.概述
裝飾者模式,英文名叫做Decorator Pattern。裝飾模式是在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能。它是通過(guò)創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來(lái)包裹真實(shí)的對(duì)象。
2.特點(diǎn)
/// <summary> /// 定義Component對(duì)象接口 /// </summary> public abstract class Component { public abstract void Operation();//一個(gè)抽象的職責(zé) } /// <summary> /// 具體對(duì)象 /// </summary> class ConcreteComponent : Component { public override void Operation() { Console.WriteLine("具體對(duì)象的操作"); } } //裝飾者抽象類 abstract class Decorator : Component { protected Component component; public void SetComponent(Component component) { this.component = component; } public override void Operation() { if (component != null) { component.Operation(); } } } class ConcreteDecoratorA : Decorator { public override void Operation() { base.Operation(); //首先運(yùn)行原Compnent的Operation(),再執(zhí)行本類的功能,如AddedBehavior,相當(dāng)于對(duì)原Component進(jìn)行了裝飾 Console.WriteLine("具體裝飾對(duì)象A的操作"); } } class ConcreteDecoratorB : Decorator { public override void Operation() { base.Operation(); //首先運(yùn)行原Compnent的Operation(),再執(zhí)行本類的功能,如AddedBehavior,相當(dāng)于對(duì)原Component進(jìn)行了裝飾 Console.WriteLine("具體裝飾對(duì)象B的操作"); } }
(2)無(wú)抽象接口
public class Car { public virtual void Description() { Console.Write("基本"); } } public class ESPDecorator : Car { Car car; public ESPDecorator(Car car) { this.car = car; } public override void Description() { car.Description(); Console.WriteLine("帶有ESP功能"); } } public class OtherDecorator : Car { Car car; public OtherDecorator(Car car) { this.car = car; } public override void Description() { car.Description(); Console.WriteLine("帶有其它功能"); } }
代碼調(diào)用
//第一種 ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); d1.SetComponent(c); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); d2.SetComponent(c); d2.Operation(); //第二種 Car car = new ESPDecorator(new OtherDecorator(new Car())); car.Description(); Console.Read();
來(lái)自: 昵稱10504424 > 《工作》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
簡(jiǎn)單Java代碼實(shí)例助你通俗易懂的理解什么是裝飾(者)設(shè)計(jì)模式 (Decorator)
簡(jiǎn)單Java代碼實(shí)例助你通俗易懂的理解什么是裝飾(者)設(shè)計(jì)模式 (Decorator)版權(quán)聲明:覺(jué)得此文有用的,不嫌麻煩的,就留個(gè)言吶,或者點(diǎn)個(gè)贊吶(額,就是文章底部的“頂”啦),要是嫌棄麻煩呢,也麻煩點(diǎn)個(gè)...
一文搞懂怎么用C語(yǔ)言實(shí)現(xiàn)裝飾模式
裝飾模式使用抽象對(duì)組件的擴(kuò)展功能進(jìn)行封裝,裝飾者和被裝飾者完全隔離開(kāi)來(lái),這樣我們就可以任意地改變裝飾者和被裝飾者,而不會(huì)引起影...
深入理解設(shè)計(jì)模式(19):裝飾模式
深入理解設(shè)計(jì)模式(19):裝飾模式一、前言。裝飾器模式又名包裝(Wrapper)模式。具體構(gòu)件(ConcreteComponent)角色:定義一個(gè)將要接收附...
【C#設(shè)計(jì)模式-裝飾者模式】
【C#設(shè)計(jì)模式-裝飾者模式】一.裝飾者模式的定義:(1)抽象構(gòu)件(Component)角色:給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。...
裝飾模式與代理模式的區(qū)別(轉(zhuǎn)載)
裝飾模式與代理模式的區(qū)別(轉(zhuǎn)載)然而,實(shí)際上,在裝飾器模式和代理模式之間還是有很多差別的。裝飾器模式關(guān)注于在一個(gè)對(duì)象上動(dòng)態(tài)的添加...
.NET裝飾模式講解
NET裝飾模式講解。//////設(shè)計(jì)模式-裝飾者模式///classProgram{staticvoidMain(string[]args){Phoneap=newApplePhone();//新買了個(gè)蘋(píng)果手機(jī)Decoratoraps=newSticker(ap);//準(zhǔn)備貼膜組件aps.Print();Deco...
C#設(shè)計(jì)模式(9)——裝飾者模式(Decorator Pattern)
裝飾者模式以對(duì)客戶透明的方式動(dòng)態(tài)地給一個(gè)對(duì)象附加上更多的責(zé)任,裝飾者模式相比生成子類可以更靈活地增加功能。到這里,裝飾者模式的...
設(shè)計(jì)模式Decorator模式(又稱Wrapper模式)
設(shè)計(jì)模式----Decorator模式(又稱Wrapper模式)2、Decorator模式與生成子類方式的比較。(3)使用Decorator的理由是:這些功能需要由用戶動(dòng)態(tài)決定加入的方式和時(shí)機(jī).Decorator提供了"即插即用"...
設(shè)計(jì)模式——裝飾模式(Decorator)
大多數(shù)的裝飾模式實(shí)際上是半透明的裝飾模式,這樣的裝飾模式也稱做半裝飾、半適配器模式。透明的裝飾模式也就是理想的裝飾模式,要求具...
微信掃碼,在手機(jī)上查看選中內(nèi)容