Skip to main content

💡 裝飾者模式

概述

裝飾者模式是一種結構型設計模式,它允許你在不修改現有物件的情況下,動態地將新行為添加到物件這種模式是繼承的一個替代方案,可以用來擴充 class 的功能

裝飾者模式通常涉及一個抽象組件(Component),具體組件(ConcreteComponent),裝飾者(Decorator),以及具體裝飾者(ConcreteDecorator)抽象組件定義了介面,具體組件實現了具體的功能,裝飾者包含一個指向抽象組件的引用並實現了相同的介面,具體裝飾者擴充了裝飾者並添加了新的功能

裝飾者模式的主要優點

  • 靈活性:你可以動態添加新功能,而不需要修改現有代碼
  • 開放/封閉原則:不需要修改現有代碼,就可以擴充物件的行為
  • 簡單性:你可以用多個簡單的裝飾者組合來實現複雜的功能,而不需要一個龐大的類層次結構

裝飾者模式的範例

1. 定義 Component 介面

public interface IComponent
{
void Operation();
}

2. 定義具體組件

public class ConcreteComponent : IComponent
{
public void Operation()
{
Console.WriteLine("具體組件操作");
}
}

3. 定義裝飾者抽象類別

public abstract class Decorator : IComponent
{
protected IComponent component;

public Decorator(IComponent component)
{
this.component = component;
}

public virtual void Operation()
{
component.Operation();
}
}

4. 定義具體裝飾者

public class ConcreteDecoratorA : Decorator
{
public ConcreteDecoratorA(IComponent component) : base(component)
{
}

public override void Operation()
{
base.Operation();
Console.WriteLine("具體裝飾者 A 的操作");
}
}
public class ConcreteDecoratorB : Decorator
{
public ConcreteDecoratorB(IComponent component) : base(component)
{
}

public override void Operation()
{
base.Operation();
Console.WriteLine("具體裝飾者 B 的操作");
}
}

5. 主程式

class Program
{
static void Main(string[] args)
{
IComponent component = new ConcreteComponent();
Decorator decoratorA = new ConcreteDecoratorA(component);
Decorator decoratorB = new ConcreteDecoratorB(decoratorA);

decoratorB.Operation();
}
}

6. 結果

具體組件操作

具體裝飾者 A 的操作

具體裝飾者 B 的操作