示例#1
0
        static void Main()
        {
            Console.WriteLine("Proxy Pattern\n");
            Console.WriteLine("=============\n");

            ISubject subject = new Proxy();

            Console.WriteLine(subject.Request());
            Console.WriteLine(subject.Request());
            Console.WriteLine("=============\n");

            ProtectionProxy subjectProtected = new ProtectionProxy();

            Console.WriteLine(subjectProtected.Request());
            //Console.WriteLine((subjectProtected as ProtectionProxy).Authenticate("Secret"));
            //Console.WriteLine((subjectProtected as ProtectionProxy).Authenticate("Abracadabra"));
            Console.WriteLine(subjectProtected.Authenticate("Secret"));
            Console.WriteLine(subjectProtected.Authenticate("Abracadabra"));
            Console.WriteLine(subjectProtected.Request());

            // ISubject test = new Subject(); //The logic of the program is organized, that the Client can only declare proxies!!!
        }
        public void Proxy()
        {
            RealSubject realsubject = new RealSubject();

            Assert.AreEqual(realsubject.DoAction(), "do action");

            VirtualProxy subject = new VirtualProxy();

            Assert.AreEqual(subject.DoAction(), "Virtual Proxy: Call to do action");

            ProtectionProxy protectedsubject = new ProtectionProxy();

            Assert.AreEqual(protectedsubject.DoAction(), "Protection Proxy: Authenticate first");

            var result = protectedsubject.Authenticate("somepassword");

            Assert.AreEqual(result, "Protection proxy: No Access");
            Assert.AreEqual(protectedsubject.DoAction(), "Protection Proxy: Authenticate first");

            result = protectedsubject.Authenticate("mypassword");
            Assert.AreEqual(result, "Protection proxy: Authenticated");
            Assert.AreEqual(protectedsubject.DoAction(), "Protection Proxy: Call to do action");
        }