设计模式结构型代理模式
代理模式是什么
比如你想去香港买珠宝,但是由于疫情原因,出行必须需要通行证导致你不得不找代购。 上面这句话 1.被代理人是你 2.代理人是代购
代理模式是什么(官方)
代理模式指的是给某一个对象提供一个代理,并由代理对象控制对原对象的访问(实际害是操作了原对象)。
优势
可以在不改变原来代码的基础上,对代码进行扩展,也可以理解为AOP。
静态代理和动态代理的区别
1.静态代理会导致代理类大量创建 2.动态代理 解决静态代理的问题
.Net5 实现动态代理代码分析
public interface IBuyPerson
{
abstract void Buy();
}
public class BuyPerson : IBuyPerson
{
public void Buy()
{
Console.WriteLine("购买了珠宝");
}
}
/// <summary>
/// 透明代理
/// </summary>
public static class TransparentProxy
{
public static T Create<T>(T t)
{
dynamic tProxy = DispatchProxy.Create<T, RealProxy<T>>()!;
tProxy!._Instance = t;
return tProxy;
}
}
/// <summary>
/// 真实代理
/// </summary>
/// <typeparam name="T"></typeparam>
public class RealProxy<T> : DispatchProxy
{
public T _Instance = default;
protected override object Invoke(MethodInfo targetMethod, object[] args)
{
Console.WriteLine("拥有疫情额外去香港的通行证");
return targetMethod.Invoke(_Instance,args);
}
}
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
IBuyPerson test = new BuyPerson();
test=TransparentProxy.Create<IBuyPerson>(test);
test.Buy();
}
}
运行结果
UML图
下一篇:
【算法】Java 中栈的使用
