首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:裝飾模式 (2) - 結構性程式碼範例與包裝器式建構寫法

     編輯:關於C語言

結構性程式碼 (完整可編譯)

using System;
abstract class Component { public abstract void Operation(); }
class ConcreteComponent : Component
{
    public override void Operation() => Console.WriteLine("ConcreteComponent.Operation()");
}
abstract class Decorator : Component
{
    protected Component component;
    public void SetComponent(Component c) => component = c;
    public override void Operation() => component?.Operation();
}
class ConcreteDecoratorA : Decorator
{
    private string addedState;
    public override void Operation()
    {
        base.Operation();
        addedState = "new state";
        Console.WriteLine("ConcreteDecoratorA.Operation()");
    }
}
class ConcreteDecoratorB : Decorator
{
    public override void Operation()
    {
        base.Operation();
        AddedBehavior();
        Console.WriteLine("ConcreteDecoratorB.Operation()");
    }
    void AddedBehavior() { }
}
public class Client
{
    public static void Main()
    {
        ConcreteComponent c = new ConcreteComponent();
        ConcreteDecoratorA d1 = new ConcreteDecoratorA();
        ConcreteDecoratorB d2 = new ConcreteDecoratorB();
        d1.SetComponent(c);
        d2.SetComponent(d1); // 鏈式包裝
        d2.Operation();
    }
}

替代建構寫法:建構子注入 (包裝器風格)

new Decorator1(
    new Decorator2(
        new Decorator3(
            new ConcreteComponent()
        )
    )
)

每層建構子接收 Component 參數並保存,Operation() 內部呼叫 component.Operation(),形成「洋蔥式」包裹結構,故又稱包裝模式 (Wrapper Pattern)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved