[Design Pattern] 구조 패턴 4. 프록시 (Proxy)
Table of Contents
프록시 (Proxy) #
- 다른 객체에 대한 접근을 제어(보호)하기 위한 대리자 역할을 수행한다.
- 하지만 Adapter와 달리 인터페이스를 변경하지는 않고 동일한 인터페이스를 제공한다. (책임은 없다)
개념적인 예시 #
// 프록시와 원래 객체는 둘 다 같은 인터페이스를 사용한다.
public interface ISubject
{
void Request();
}
// 원래 객체
class RealSubject : ISubject
{
public void Request()
{
Console.WriteLine("RealSubject: Handling Request.");
}
}
// 프록시
class Proxy : ISubject
{
private RealSubject _realSubject;
public Proxy(RealSubject realSubject)
{
this._realSubject = realSubject;
}
public void Request()
{
// 접근을 제어한다.
if (this.CheckAccess())
{
this._realSubject.Request();
this.LogAccess();
}
}
public bool CheckAccess()
{
Console.WriteLine("Proxy: Checking access prior to firing a real request.");
return true;
}
public void LogAccess()
{
Console.WriteLine("Proxy: Logging the time of request.");
}
}
public class Client
{
public void ClientCode(ISubject subject)
{
// ...
subject.Request();
// ...
}
}
class Program
{
static void Main(string[] args)
{
Client client = new Client();
// 원래 객체
RealSubject realSubject = new RealSubject();
client.ClientCode(realSubject);
// 프록시
Proxy proxy = new Proxy(realSubject);
client.ClientCode(proxy);
}
}