• proxytheory.cs


      using System;

      // Proxy Pattern              Judith Bishop Dec 2006
      // Shows virtual and protection proxies
     
      class SubjectAccessor {  
        public interface ISubject {
        string Request ();
      }
     
      private class Subject {
        public string Request() {
          return "Subject Request " + "Choose left door\n";
        }
      }

      public class Proxy : ISubject {
        Subject subject;
     
        public string Request() {
          // A Virtual Proxy creates the object only on its first method call
          if (subject == null) {
            Console.WriteLine("Subject inactive");
            subject = new Subject();
          }        
          Console.WriteLine("Subject active");
            return "Proxy: Call to " + subject.Request();
          }  
        }
     
        public class ProtectionProxy : ISubject {
          // An Authentication Proxy first asks for a password
          Subject subject;
          string password = "Abracadabra";

          public string Authenticate (string supplied) {
            if (supplied!=password)
              return "Protection Proxy: No access";
            else
              subject = new Subject();
            return "Protection Proxy: Authenticated";
          }
          
          public string Request() {
             if (subject==null)
              return "Protection Proxy: Authenticate first";
            else
              return "Protection Proxy: Call to "+
            subject.Request();
          }  
        }
      }

      class Client  : SubjectAccessor {
        static void Main() {
          Console.WriteLine("Proxy Pattern\n");
        
          ISubject subject = new Proxy();
          Console.WriteLine(subject.Request());
          Console.WriteLine(subject.Request());
        
          subject = new ProtectionProxy();
          Console.WriteLine(subject.Request());
          Console.WriteLine((subject as ProtectionProxy).Authenticate("Secret"));
          Console.WriteLine((subject as ProtectionProxy).Authenticate("Abracadabra"));
          Console.WriteLine(subject.Request());
        }
      }

    /* Output:

    Proxy Pattern

    Subject inactive
    Subject active
    Proxy: Call to Subject Request Choose left door

    Subject active
    Proxy: Call to Subject Request Choose left door

    Protection Proxy: Authenticate first
    Protection Proxy: No access
    Protection Proxy: Authenticated
    Protection Proxy: Call to Subject Request Choose left door
    */
  • 相关阅读:
    javascript定时器,取消定时器,及js定时器优化方法
    Systen,IO
    批量地理位置解析
    数据库分区分表(sql、mysql)
    数据库还原的多种方式
    js前端文件收集(一)
    NPOI解决由于excel删除数据导致空行读取问题
    echarts2.0tooltip边框限制导致tooltip显示不全解决办法
    数据库备份通用脚本
    echarts 用marlkline画线 同时配置中含有datazoom,怎么设置markline
  • 原文地址:https://www.cnblogs.com/shihao/p/2496013.html
Copyright © 2020-2023  润新知