裝飾模式的定義:
是允許向一個現有的對象添加新的功能,同時又不改變其結構。裝飾模式在設計模式中屬於結構型模式,它是作爲現有類的一個包裝。
主要意圖:動態的給一個對象添加一些額外的職責 (就增加功能來說,裝飾器模式相比生成自雷更爲靈活)。
使用場景:在不想增加很多子類的情況下擴展類(1,擴展一個類的功能。2,動態增加功能,動態撤銷。)。
優點:裝飾類和被裝飾類可以獨立發展,耦合度低,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能。
缺點:多層裝飾比較麻煩
在某種意義上是可以代替繼承使用。
首先我們來看一下它的類圖:
接下來是代碼:
using System;
namespace _03裝飾模式_演示
{
class Program
{
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();
Console.Read();
}
}
abstract class Componet
{
public abstract void Operation();
}
class ConcreteComponent:Componet
{
public override void Operation()
{
Console.WriteLine("具體對象的操作");
}
}
abstract class Decorator:Componet
{
protected Componet componet;
public void SetComponent(Componet componet)
{
this.componet = componet;
}
public override void Operation()
{
if(componet != null)
{
componet.Operation();
}
}
}
class ConcreteDecoratorA:Decorator
{
private string addedState;
public override void Operation()
{
base.Operation();
addedState = "New State";
Console.WriteLine("具體裝飾對象A的操作");
}
}
class ConcreteDecoratorB:Decorator
{
public override void Operation()
{
base.Operation();
AddedBehavior();
Console.WriteLine("具體張氏對象B的操作");
}
private void AddedBehavior()
{
}
}
}