设计模式结构型代理模式

代理模式是什么

比如你想去香港买珠宝,但是由于疫情原因,出行必须需要通行证导致你不得不找代购。 上面这句话 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图

经验分享 程序员 微信小程序 职场和发展