示例
public interface ISubject
{
/// <summary>
/// get 查询是否有票
/// </summary>
/// <returns></returns>
bool GetSomething();
/// <summary>
/// do 购买车票
/// </summary>
void DoSomething();
}
实现类
public class RealSubject : ISubject
{
/// <summary>
/// 模拟火车票代售点
/// </summary>
public RealSubject()
{
//等待表示很耗费资源
Thread.Sleep(2000);
long lResult = 0;
for (int i = 0; i < 100000000; i++)
{
lResult += i;
}
Console.WriteLine("RealSubject被构造。。。");
}
/// <summary>
/// 火车站查询火车票
/// </summary>
public bool GetSomething()
{
return true;// 表示还有车票
}
/// <summary>
/// 火车站买票
/// </summary>
public void DoSomething()
{
Console.WriteLine("买票");
}
}
上端调用
代理的实现类
public class ProxySubject : ISubject
{
private RealSubject realSubject = new RealSubject();
public void DoSomething()
{
realSubject.DoSomething();
}
public bool GetSomething()
{
return realSubject.GetSomething();
}
}
有了这个代理---增加一些公共的逻辑:日志代理、异常捕捉代理、缓存代理
标准的代理:
1、不能修改原有的逻辑。只能增加通用逻辑,不能增加业务逻辑。
2、只能增加公共的逻辑---写日志,异常捕捉,缓存,单例,安全(鉴权授权),延迟,事务,远程(调用远程的东西);
跟AOP代理实现很像,主流AOP靠的就是动态代理
单例代理--构造一次,采用静态字段即可
public class ProxySubject : ISubject
{
private static RealSubject realSubject = new RealSubject();
public void DoSomething()
{
realSubject.DoSomething();
}
public bool GetSomething()
{
return realSubject.GetSomething();
}
}
缓存代理
代理模式、适配器模式区别
7个结构型设计模式很像,都是包一层,区别在于解决什么问题