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