using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.StructuralPattern.ProxyPattern
{
public class ProxyPattern
{
//代理模式就是对真是类的包装,包装其业务功能,并且不扩展其业务功能(比如我代理类可以对真实类的支付方法增加一些功能,这叫对业务方法的包装;但是真实类只有查账和支付两个方法,代理类不能去新增一个转账业务方法,这样就不是代理类了)真实业务类有啥方法,代理类只能有这些方法
//这个是视频里老师的意思,但是感觉可以扩展呀?扩展后不是更方便吗?扩展后会造成什么后果吗
//扩展后就不叫代理类了,代理类是被动的,主动权在真实业务类那
//代理类的优点:
// 可以避免对业务类的修改,只要不是修改业务,都可以放到代理类中来
// 日志,异常处理,缓存(比如查人信息的方法,我放到缓存中,下次来缓存如果有此人,我就不用调真实业务类,提升了性能) 都可以放到代理类中
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.StructuralPattern.ProxyPattern
{
/// <summary>
/// 这是一个支付的接口
/// </summary>
public interface ISubject
{
/// <summary>
/// 查账
/// </summary>
void CheckAccounts();
/// <summary>
/// 付钱
/// </summary>
void Pay();
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.StructuralPattern.ProxyPattern
{
/// <summary>
/// 我这个可能是支付宝
/// </summary>
public class RealSubject : ISubject
{
public void CheckAccounts()
{
Console.WriteLine("支付宝查账");
}
public void Pay()
{
Console.WriteLine("支付宝支付");
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.StructuralPattern.ProxyPattern
{
/// <summary>
/// 这是个代理类,我可以在RealSubject的方法中加入其他功能
/// </summary>
public class ProxySubject : ISubject
{
private static ISubject RealSubject = null;
public ProxySubject(ISubject subject)
{
RealSubject = subject;
}
public void CheckAccounts()
{
//加日志,如果出入参 我也可以对出入参进行操作
//也可以缓存结果
RealSubject.CheckAccounts();
}
public void Pay()
{
RealSubject.Pay();
}
}
}