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"); }