public class Program
{
public static void Show()
{
ISubject subject = new ProxySubject();
subject.DoSomething();
subject.GetSomething();
}
}
/// <summary>
/// 业务接口
/// </summary>
public interface ISubject
{
/// <summary>
/// get
/// </summary>
/// <returns></returns>
bool GetSomething();
/// <summary>
/// do
/// </summary>
void DoSomething();
}
/// <summary>
/// 没有什么技术问题是包一层不能解决的
/// 我的地盘听我的,可以随意搞事情
/// 日志/异常处理/权限/单例/缓存/事务。。
/// 只要不是业务逻辑,都可以在这里扩展,而不影响Real
/// </summary>
public class ProxySubject : ISubject
{
private ISubject _iSubject = new RealSubject();
public void DoSomething()
{
try
{
Console.WriteLine("This is DoSomething Before");
this._iSubject.DoSomething();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public bool GetSomething()
{
return this._iSubject.GetSomething();
}
}
/// <summary>
/// 一个耗时耗资源的对象方法
/// 一个第三方封装的类和方法
/// </summary>
public class RealSubject : ISubject
{
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()
{
Console.WriteLine("坐车去火车站看看余票信息。。。");
Thread.Sleep(3000);
Console.WriteLine("到火车站,看到是有票的");
return true;
}
/// <summary>
/// 火车站买票
/// </summary>
public void DoSomething()
{
//Console.WriteLine("This is DoSomething Before");
Console.WriteLine("开始排队。。。");
Thread.Sleep(2000);
Console.WriteLine("终于买到票了。。。");
}
}
(精华)2020年8月13日 C#基础知识点 23种设计模式(结构型模式---代理模式)
猜你喜欢
转载自blog.csdn.net/aa2528877987/article/details/107982601
今日推荐
周排行