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

C# 設計模式無廢話系列(九):Proxy 代理模式

     編輯:關於C#

意圖

為其他對象提供代理以控制對該對象的訪問。

適用場景

代理模式極常用:降低使用複雜度、提升友好度、提高效率。生活中:明星經紀人(節省明星時間)、保險代理人(降低投保複雜度)。開發中:網站透過 .NET Remoting 訪問帳號服務,調試時希望直接引用 DLL 實例化,正式環境走遠程呼叫。引入 Proxy 封裝環境切換與遠程呼叫細節。

完整範例程式碼

using System;
using System.Collections.Generic;
using System.Text;

namespace ProxyExample
{
    class Program
    {
        static void Main(string[] args)
        {
            AccountProxy ap = new AccountProxy();
            ap.Register();
        }
    }
    interface IAccount { void Register(); }
    class Account : IAccount
    {
        public void Register() { System.Threading.Thread.Sleep(1000); Console.WriteLine("Done"); }
    }
    class AccountProxy : IAccount
    {
        readonly bool isDebug = true;
        IAccount account;
        public AccountProxy()
        {
            if (isDebug) account = new Account();
            else account = (IAccount)Activator.GetObject(typeof(IAccount), "uri");
        }
        public void Register()
        {
            Console.WriteLine("Please wait...");
            account.Register();
        }
    }
}

程式碼解析

  • IAccount:抽象主題,代理與被代理共同遵循,使代理可替換被代理。
  • AccountProxy:代理主題,含邏輯/預處理/後處理(此處輸出等待提示),非單純轉發。
  • Account:真實主題。

何時採用

  • 希望降低對象使用複雜度、提升友好度、提高效率均可考慮。

實作要點

  • 代理與被代理遵循一致介面。
  • 特定情況下可犧牲介面一致性(封裝需求優先),仍可視為 Proxy。

注意事項

  • Proxy、Facade、Adapter 皆為對象一層封裝,側重不同:Proxy 基於一致介面封裝;Facade 針對子系統封裝為高層介面;Adapter 為適配介面目的封裝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved