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

C# 設計模式:代理模式完整指南(二)— 結構性代碼與延遲初始化實作

     編輯:關於C語言

結構性示範代碼


using System;

// 抽象主題
abstract class Subject
{
    public abstract void Request();
}

// 真實主題
class RealSubject : Subject
{
    public override void Request()
        => Console.WriteLine("Called RealSubject.Request()");
}

// 代理
class Proxy : Subject
{
    private RealSubject realSubject;

    public override void Request()
    {
        // 延遲初始化
        if (realSubject == null)
            realSubject = new RealSubject();

        PreRequest();
        realSubject.Request();
        PostRequest();
    }

    private void PreRequest() => Console.WriteLine("PreRequest.");
    private void PostRequest() => Console.WriteLine("PostRequest.");
}

// 客戶端
public class Client
{
    public static void Main()
    {
        Proxy p = new Proxy();
        p.Request();
    }
}

執行結果

PreRequest.
Called RealSubject.Request()
PostRequest.

核心模式要素

  • 介面一致:代理實作與真實主題相同介面
  • 持有引用:代理內部持有真實主題引用
  • 控制存取:決定何時創建、銷毀真實主題
  • 預/後處理:轉發調用前後執行額外邏輯(日志、權限、快取等)

延遲初始化優勢

  • 真實主題建構昂貴(大量記憶體、網絡連線、資料庫連接)
  • 若從未調用 Request(),真實主題永不創建
  • 首次調用時才實例化,後續複用

代理 vs 裝飾器 對比

維度代理裝飾器
目的控制存取動態添加職責
生命週期代理通常創建/管理真實物件裝飾器接收外部傳入的物件
介面相同介面相同介面(可擴展)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved