zoukankan      html  css  js  c++  java
  • 设计模式之代理模式

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

    在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

    首先创建一个标准的代理模式,我们需要一个抽象接口(不要这个接口也可以)

    1   public interface ISubject
    2   {
    3      bool GetSomething();
    4 
    5      void DoSomething();
    6   }

    然后新建一个类模拟去火车站买票的类(被代理类)

     1 namespace 代理模式
     2 {
     3     class RealuSubject:ISubject
     4     {
     5         public RealuSubject()
     6         {
     7             Thread.Sleep(2000);
     8             long lResult = 0;
     9             for (int i = 0; i < 100000000; i++)
    10             {
    11                 lResult += i;
    12             }
    13             Console.WriteLine("RealuSubject被构造...");
    14         }
    15 
    16 
    17         public bool GetSomething()
    18         {
    19             Console.WriteLine("坐火车去火车站看看余票信息...");
    20             Thread.Sleep(2000);
    21             Console.WriteLine("火车站,看到有票的");
    22             return true;
    23         }
    24 
    25         public void DoSomething()
    26         {
    27             Console.WriteLine("开始排队......");
    28             Thread.Sleep(2000);
    29             Console.WriteLine("终于买到票了.....");
    30         }
    31     }
    32 }

    接着创建代理类,这里使用日志代理的功能来演示(也就是在代理类里加入了日志输出的代码)

     1 namespace 代理模式
     2 {
     3     class ProxySubject:ISubject
     4     {
     5         private ISubject _RealuSubject = new RealuSubject();
     6 
     7         public bool GetSomething()
     8         {
     9             Console.WriteLine("GetSomething start....");
    10             bool bResult= this._RealuSubject.GetSomething();
    11             Console.WriteLine("GetSomething end....");
    12             return bResult;
    13         }
    14 
    15         public void DoSomething()
    16         {
    17             Console.WriteLine("DoSomething start....");
    18             this._RealuSubject.DoSomething();
    19             Console.WriteLine("DoSomething end....");
    20         }
    21     }
    22 }

    最后我们调用代理模式

    代理模式可以实现AOP的思想,他可以实现很多种功能例如上面的日志代理,数据库代理,延迟代理,权限代理,异常代理

    这些都是在代理层给加上去的一些功能,而不修改到原来的代码

  • 相关阅读:
    数据类型,线性表概念
    POJ3261:Milk Patterns——题解
    POJ1743:Musical Theme——题解
    BZOJ1031:[JSOI2007]字符加密——题解
    BZOJ1565:[NOI2009]植物大战僵尸——题解
    BZOJ1076:[SCOI2008]奖励关——题解
    BZOJ4873:[SHOI2017]寿司餐厅——题解
    BZOJ4872:[SHOI2017]分手是祝愿——题解
    BZOJ4870:[SHOI2017]组合数问题——题解
    HDU5446:Unknown Treasure——题解
  • 原文地址:https://www.cnblogs.com/BigDong/p/8051233.html
Copyright © 2011-2022 走看看