Csharp/C Sharp/Design Patterns/Proxy Pattern
Pattern Example: Remote-Proxy
<source lang="csharp"> using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; public interface IEmployee {
string Design(); string StressTest(); string Mechanical(); string Performance();
} public class ChiefDesignEngineer : MarshalByRefObject, IEmployee {
public string Design() { return "Design "; } public string StressTest() { return "stress"; } public string Mechanical() { return "mechanical"; } public string Performance() { return "performance"; } public ChiefDesignEngineer() { ;}
} public class ProxyChiefDesignEngineer : MarshalByRefObject, IEmployee {
private ChiefDesignEngineer chief; public string Design() { return this.chief.Design(); } public string StressTest() { return this.chief.StressTest(); } public string Mechanical() { return "A supplement to mechanical"; } public string Performance() { return "Performance information is in the manual."; } public ProxyChiefDesignEngineer() { this.chief = new ChiefDesignEngineer(); }
}
public class Server {
static void Main(string[] args) { TcpServerChannel channel = new TcpServerChannel(1234); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType(typeof(ProxyChiefDesignEngineer), "RemoteProxy", WellKnownObjectMode.SingleCall); Console.WriteLine("Press [Enter] to terminate server..."); Console.ReadLine(); }
} public class Client {
static void Main(string[] args) { TcpClientChannel channel = new TcpClientChannel(); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownClientType (typeof(ProxyChiefDesignEngineer), "tcp://localhost:1234/RemoteProxy"); ProxyChiefDesignEngineer ukProxyChief = new ProxyChiefDesignEngineer(); Console.WriteLine("Answer: " + ukProxyChief.Performance()); Console.WriteLine("Answer: " + ukProxyChief.Design()); }
}
</source>
Proxy Pattern Demo
<source lang="csharp"> using System; public interface IEmployee {
string Design(); string StressTest(); string Mechanical(); string Performance();
} public class ChiefDesignEngineer : IEmployee {
public string Design() { return "Design "; } public string StressTest() { return "Stress Test"; } public string Mechanical() { return "mechanical"; } public string Performance() { return "performance"; } public ChiefDesignEngineer() { ;}
}
public class ProxyChiefDesignEngineer : IEmployee {
private ChiefDesignEngineer chief; public string Design() { return this.chief.Design(); } public string StressTest() { return this.chief.StressTest(); } public string Mechanical() { return "supplement to mechanical."; } public string Performance() { return "Performance for Chief Design Engineer"; } public ProxyChiefDesignEngineer() { this.chief = new ChiefDesignEngineer(); }
} public class Client {
static void Main(string[] args) { ProxyChiefDesignEngineer caProxyChief = new ProxyChiefDesignEngineer(); Console.WriteLine(caProxyChief.StressTest()); Console.WriteLine(caProxyChief.Performance()); ProxyChiefDesignEngineer nyProxyChief = new ProxyChiefDesignEngineer(); Console.WriteLine(nyProxyChief.Mechanical()); }
}
</source>