Csharp/C Sharp/Design Patterns/Proxy Pattern — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 11:38, 26 мая 2010

Pattern Example: Remote-Proxy

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


Proxy Pattern Demo

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