using System; using System.Collections; namespace Practice { public interface ISwitch { void On(string s); void Off(string s); } public class SwitchEvent : ISwitch { string _name; public SwitchEvent(string Name) { _name = Name; } public void On(string Sender) { Console.WriteLine("Deny Message To: " + _name + " , " + Sender + " is already on."); } public void Off(string Sender) { Console.WriteLine("Deny Message To: " + _name + " , " + Sender + " is already off."); } } public class TV { bool _on = false; bool _off = true; string _name; ArrayList _event = new ArrayList(); public TV(string Name) { _name = Name; } public void Biding(ISwitch B) { _event.Add(B); } public void UnBiding(ISwitch B) { _event.Remove(B); } public void TurnON() { if (_on) { foreach (ISwitch user in _event) { user.On(_name); } } else { _on = true; _off = false; } } public void TurnOff() { if (_off) { foreach (ISwitch user in _event) { user.Off(_name); } } else { _on = false; _off = true; } } } public class App { static void Main() { TV tv1 = new TV("tv1"); TV tv2 = new TV("tv2"); TV tv3 = new TV("tv3"); SwitchEvent watcher1 = new SwitchEvent("watcher1"); SwitchEvent watcher2 = new SwitchEvent("watcher2"); SwitchEvent watcher3 = new SwitchEvent("watcher3"); //Biding Watchers tv1.Biding(watcher1); tv1.Biding(watcher2); tv2.Biding(watcher3); tv3.Biding(watcher1); tv3.Biding(watcher3); //test code tv1.TurnON(); tv1.TurnON(); tv1.UnBiding(watcher2); tv1.TurnOff(); tv1.TurnOff(); tv2.TurnON(); tv2.TurnOff(); tv3.TurnOff(); tv3.TurnOff(); tv3.TurnON(); tv3.TurnOff(); Console.ReadKey(); } } }