代理模式簡介
一個類代表另一個類的功能,爲其他對象提供一種代理以控制對這個對象的訪問。
主要解決:
在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由於某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。
使用場景:
想在訪問一個類時做一些控制,增加中間層Proxy。在代理模式中,由於Proxy與ConcreteSubject繼承同一接口,所以Client調用ConcreteSubject可以轉化爲Client調用Proxy在調用ConcreteSubject,類Proxy爲中間代理。
C# Demo
using System;
using System.Collections.Generic;
namespace Proxy_Pattern
{
/// <summary>
/// 代理類和對象的共用接口
/// </summary>
public abstract class Subject
{
public abstract void Print();
}
/// <summary>
/// 代理類所創建的對象
/// </summary>
public class ConcreteSubject : Subject
{
public override void Print()
{
Console.WriteLine("ConcreteSubject");
}
}
/// <summary>
/// 代理類
/// </summary>
public class Proxy : Subject
{
private ConcreteSubject concreteSubject;
public override void Print()
{
if( concreteSubject == null)
{
concreteSubject = new ConcreteSubject();
}
concreteSubject.Print();
}
}
/// <summary>
/// 客戶端測試類
/// </summary>
class Client
{
static void Main(string[] args)
{
// 創建代理類
Proxy proxy = new Proxy();
proxy.Print();
Console.Read();
}
}
}
代理模式優點
- 職責清晰
真實的角色就是實現實際的業務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件完成事務,附帶的結果就是編程簡潔清晰。 - 代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了中介的作用和保護了目標對象的作用。
- 高擴展性
參考資料
https://www.runoob.com/design-pattern/proxy-pattern.html
更多: