GoF的定义是:Provide a surrogate or placeholder for another object to control access to it.
一个类的替身。说白了就是LazyLoad嘛。先定义一个基类,然后实际的类和代理类都来继承这个基类。代理类中包含个基类,客户调用基类的方法时,先到来调用代理类的方法,在这个方法中LazyLoad代理类的实例,然后再调用代理类的方法。
用途还是比较广泛的。
来看代码:
一个类的替身。说白了就是LazyLoad嘛。先定义一个基类,然后实际的类和代理类都来继承这个基类。代理类中包含个基类,客户调用基类的方法时,先到来调用代理类的方法,在这个方法中LazyLoad代理类的实例,然后再调用代理类的方法。
用途还是比较广泛的。
来看代码:
//
Proxy pattern -- Structural example
using System;
namespace DoFactory.GangOfFour.Proxy.Structural
{
// MainApp test application
class MainApp
{
static void Main()
{
// Create proxy and request a service
Proxy proxy = new Proxy();
proxy.Request();
// Wait for user
Console.Read();
}
}
// "Subject"
abstract class Subject
{
public abstract void Request();
}
// "RealSubject"
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("Called RealSubject.Request()");
}
}
// "Proxy"
class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
// Use 'lazy initialization'
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
}
using System;
namespace DoFactory.GangOfFour.Proxy.Structural
{
// MainApp test application
class MainApp
{
static void Main()
{
// Create proxy and request a service
Proxy proxy = new Proxy();
proxy.Request();
// Wait for user
Console.Read();
}
}
// "Subject"
abstract class Subject
{
public abstract void Request();
}
// "RealSubject"
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("Called RealSubject.Request()");
}
}
// "Proxy"
class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
// Use 'lazy initialization'
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
}