C#中增强类功能的几种方式详解

2020-01-05 10:14:17刘景俊
  • 通过使用不同的装饰者类或不同的装饰者排序,可以得到各种不同的结果

    缺点:

    • 产生很多装饰者类
    • 多层装饰复杂

      代理模式

      代理模式就是给一个对象提供一个代理对象,并且由代理控制原对象的引用。

      包含角色:

      • 抽象角色:抽象角色是代理角色和被代理角色的所共同继承或实现的抽象类或接口
      • 代理角色:代理角色是持有被代理角色引用的类,代理角色可以在执行被代理角色的操作时附加自己的操作
      • 被代理角色:被代理角色是代理角色所代理的对象,是真实要操作的对象

        静态代理

        动态代理涉及到反射技术相对静态代理会复杂很多,掌握好动态代理对AOP技术有很大帮助

        
        namespace Proxy
        {
         /// <summary>
         /// 共同抽象角色
         /// </summary>
         public interface IBuyHouse
         {
          void Buy();
         }
        
         /// <summary>
         /// 真实买房人,被代理角色
         /// </summary>
         public class Customer : IBuyHouse
         {
          public void Buy()
          {
           System.Console.WriteLine("买房子");
          }
         }
        
         /// <summary>
         /// 中介-代理角色
         /// </summary>
         public class CustomerProxy : IBuyHouse
         {
          private IBuyHouse target;
          public CustomerProxy(IBuyHouse buyHouse)
          {
           this.target = buyHouse;
          }
          public void Buy()
          {
           System.Console.WriteLine("筛选符合条件的房源");
           this.target.Buy();
          }
         }
        
         public class Program
         {
          static void Main(string[] args)
          {
           IBuyHouse buyHouse = new CustomerProxy(new Customer());
           buyHouse.Buy();
           System.Console.ReadKey();
          }
         }
        }