• 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
    */
  • 相关阅读:
    Codeforces Round 731 (Div.3) 所有题目题解
    NOI2021 同步赛游记
    【题解】CF1547F Array Stabilization (GCD version)
    Codeforces 人类智慧题目大赏
    【题解】CF1559E Mocha and Stars
    OI 日常犯的一些错误
    AtCoder Beginner Contest(ABC) 247 A~G 题解
    【题解】[六省联考 2017] 组合数问题
    Something about My Blog
    【OI 退役记】NOIP2022 游记
  • 原文地址:https://www.cnblogs.com/shihao/p/2496013.html
Copyright © 2020-2023  润新知