using System;namespace ConsoleApp2
{classProgram{staticvoidMain(string[] args){Client client =newClient();
Console.WriteLine("Client: Executing the client code with a real subject:");RealSubject realSubject =newRealSubject();
client.CleintCode(realSubject);
Console.WriteLine();
Console.WriteLine("Client:Executing the same client code with a proxy:");Proxy proxy=newProxy(realSubject);
client.CleintCode(proxy);}}publicinterfaceISubject{voidRequest();}classRealSubject:ISubject{publicvoidRequest(){
Console.WriteLine("RealSubject:Handing Request。。");}}classProxy:ISubject{privateRealSubject _realSubject;publicProxy(RealSubject realSubject){this._realSubject = realSubject;}publicvoidRequest(){if(this.CheckAccess()){this._realSubject.Request();this.LogAccess();}}publicboolCheckAccess(){
Console.WriteLine("Proxy:Checkingg access prior to firign a real request.");returntrue;}publicvoidLogAccess(){
Console.WriteLine("Proxy:Logging the time of request");}}publicclassClient{publicvoidCleintCode(ISubject subject){
subject.Request();}}}