Csharp/C Sharp/Design Patterns/Proxy Pattern

Материал из .Net Framework эксперт
Версия от 14:38, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>