public void AdvancedRemote_Case_Mute() { IDevice device = new Radio(21, 12); var advancedRemoteRadio = new AdvancedRemote(device); advancedRemoteRadio.Mute(); Assert.Equal(0, device.GetVolume()); }
private static void DoBridge() { Remote remote; remote = new Remote(new Television()); Console.WriteLine(remote.GetDeviceName()); remote = new AdvancedRemote(new Radio()); Console.WriteLine(remote.GetDeviceName()); }
public void DoStuff() { // Fördel: det krävs faktiskt färre klasser här + om fler devices dyker upp så behöver vi inte ändra i andra klasser { var tv = new TV(); var remote = new BasicRemote(tv); // en kombination av abstraction-implementation remote.TogglePower(); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); Assert.AreEqual(3, remote.GetVolume()); Assert.AreEqual("TV", remote.DeviceName); Assert.AreEqual(10, tv.MaxVolume); } { var tv = new TV(); var remote = new AdvancedRemote(tv); remote.TogglePower(); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); remote.Mute(); Assert.AreEqual(0, remote.GetVolume()); Assert.AreEqual("TV", remote.DeviceName); Assert.AreEqual(10, tv.MaxVolume); } { var radio = new Radio(); var remote = new BasicRemote(radio); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); remote.VolumeUp(); Assert.AreEqual(3, remote.GetVolume()); Assert.AreEqual("Radio", remote.DeviceName); Assert.AreEqual(3, radio.MaxVolume); } { var radio = new Radio(); var remote = new AdvancedRemote(radio); remote.VolumeUp(); remote.VolumeUp(); Assert.AreEqual(2, remote.GetVolume()); Assert.AreEqual("Radio", remote.DeviceName); Assert.AreEqual(3, radio.MaxVolume); } }
/// <summary> /// Паттерн "Мост" позволяет изменять реализацию и абстракцию, для чего они размещаются в двух разных иерархиях классов. /// Мост — это структурный паттерн, он разделяет бизнес-логику или большой класс на несколько отдельных иерархий, которые потом можно развивать отдельно друг от друга. /// Он необходим для избежания порождения большого количества классов. /// Различие с паттерном "Стратегия" заключается в том, что "Стратегия" делает акцент на унифицированном использовании альтернативных алгоритмов, /// а "Мост" занимается именно разделением абстракции от реализации. /// </summary> public void DemoBridge() { var tv = new Tv(); var remoteControl = new Remote(tv); remoteControl.TogglePower(); remoteControl.ChannelUp(); var advancedRemoteControl = new AdvancedRemote(tv); advancedRemoteControl.TogglePower(); advancedRemoteControl.Mute(); }
public static void TestDevice(IDevice device) { Console.WriteLine("Tests with basic remote."); BasicRemote basicRemote = new BasicRemote(device); basicRemote.Power(); device.PrintStatus(); Console.WriteLine("Tests with advanced remote."); AdvancedRemote advancedRemote = new AdvancedRemote(device); advancedRemote.Power(); advancedRemote.Mute(); device.PrintStatus(); }
public Bridge() { var tv = new Device(); var homeTheater = new Device(); var tvRemote = new Remote(tv); var htRemote = new AdvancedRemote(homeTheater); tvRemote.TurnOn(); tvRemote.IncreaseVolume(); tvRemote.TurnOff(); htRemote.TurnOn(); htRemote.DecreaseVolume(); htRemote.Mute(); htRemote.TurnOff(); }
static void Main(string[] args) { IDevice device = new Tv(true, 50); IRemote simpleRemote = new MinimalRemote(device); AdvancedRemote advancedRemote = new AdvancedRemote(device); simpleRemote.TogglePower(); simpleRemote.TogglePower(); Console.WriteLine(); advancedRemote.TogglePower(); advancedRemote.TogglePower(); Console.WriteLine(); advancedRemote.Mute(); advancedRemote.Mute(); }
static void Main(string[] args) { #region FactoryMethod ITransport passengerTransport = new PassengerLogistics().CreateTransport(); ITransport seaTransport = new SeaLogistics().CreateTransport(); ITransport roadTransport = new RoadLogistics().CreateTransport(); passengerTransport.Delivery += PrintEvent; seaTransport.Delivery += PrintEvent; roadTransport.Delivery += PrintEvent; passengerTransport.Transporting(); seaTransport.Transporting(); roadTransport.Transporting(); #endregion #region AbstractFactory if (args[0] == "Windows") { IGuiElement element = new CreatorWinElements(); GuiMaster master = new GuiMaster(element); master.CreateElements(); master.Paint(); } if (args[0] == "Mac") { IGuiElement element = new CreatorMacElements(); GuiMaster master = new GuiMaster(element); master.CreateElements(); master.Paint(); } else { throw new FormatException(nameof(args)); } #endregion #region Builder CarBuilder builder = new CarBuilder(); Director director = new Director(builder); Car car = builder.GetResult(); Console.WriteLine(director.ToString()); CarManualBuilder manualBuilder = new CarManualBuilder(); director = new Director(manualBuilder); Manual manual = manualBuilder.GetResult(); car.Reset(); Console.WriteLine(director.ToString()); manual.Reset(); #endregion #region Prototype //массив фигур Shape[] shapes = new Shape[3]; //создаем фигуры Triangle triangle = new Triangle(12.4, 12.4); Rectangle rectangle = new Rectangle(5, 10, "Grey", true); Circle circle = new Circle(256.6, true, "Red"); //кладём в массив shapes.SetValue(triangle, 0); shapes.SetValue(circle, 1); shapes.SetValue(rectangle, 2); //создаем копии List <Shape> shapesCopy = new List <Shape>(shapes.Length); foreach (Shape shape in shapes) { shapesCopy.Add(shape.Clone()); } #endregion #region Singleton DataBase db = DataBase.GetInstance(); db.Query("SELECT ..."); #endregion #region Adapter RoundHole hole = new RoundHole(125.5); RoundPeg peg = new RoundPeg(175); hole.Fits(peg); var smallSqpeg = new SquarePage(2); var largeSqpeg = new SquarePage(5); //hole.Fits(small_sqpeg) // ошибка компиляции, несовместимые типы var smallSqpegAdapter = new SquarePegAdapter(smallSqpeg); var largeSqpegAdapter = new SquarePegAdapter(largeSqpeg); hole.Fits(smallSqpegAdapter); hole.Fits(largeSqpegAdapter); #endregion #region Bridge var tv = new Tv(); var remote = new AdvancedRemote(tv); remote.TooglePower(); var radio = new Radio(); var remoting = new Remote(radio); remoting.ChannelDown(); #endregion #region Composite var all = new CompoundGraphic(); all.Add(new Dot(1, 1)); all.Add(new structure_patterns.Composite.Circle(5, 3, 10.5)); var group = new CompoundGraphic(); group.Add(new structure_patterns.Composite.Circle(1, 1, 135.4)); group.Add(new Dot(15, 15)); all.Add(group); all.Draw(); #endregion #region Decorator var source = new FileDataSource("somefile.dat"); source.WriteData("salaryrecords"); var decorator = new CompressionDecorator(source); source.WriteData("salaryrecords"); decorator.Compression(); #endregion #region Facade var converter = new VideoConverter(); var mp4 = converter.Convert("youtubevideo.org", "mp4"); var fileStream = mp4.OpenRead(); fileStream.Lock(1, 1); #endregion #region Cache Forest forest = new Forest(); forest.PlantTree(1, 1, "green", "apple", "textture nature"); forest.PlantTree(2, 1, "green", "pineapple", "nature"); forest.Draw(new object()); #endregion #region Proxy var service = new ThirdPartyYoutubeClass(); var proxy = new CachedYoutubeClass(service); var manager = new YoutubeManager(proxy); manager.ReactOnUserInput(123); #endregion #region ChainOfResponsibility var dialog = new Dialog("Help Me from Dialog"); var panel = new Panel("Help me from Panel"); var ok = new Button("Button Ok help text"); var cancel = new Button("Button canceled help text"); panel.Add(ok); panel.Add(cancel); dialog.Add(panel); dialog.ShowHelp(); #endregion }
static void Main(string[] args) // Client { // Example 1 SimpleRemoteControl remote = new SimpleRemoteControl(); // Invoker LightBulb light = new LightBulb(); // Receiver LightOnCommand lightOnCommand = new LightOnCommand(light); // Command remote.SetCommand(lightOnCommand); remote.ButtonWasPressed(); remote.UndoButtonWasPressed(); // Example 2 AdvancedRemote remote2 = new AdvancedRemote(); GarageDoor garageDoor = new GarageDoor(); Stereo stereo = new Stereo(); GarageDoorUpCommand garageDoorUpCommand = new GarageDoorUpCommand(garageDoor); GarageDoorDownCommand garageDoorDownCommand = new GarageDoorDownCommand(garageDoor); StereoOnCommand stereoOnCommand = new StereoOnCommand(stereo); StereoOffCommand stereoOffCommand = new StereoOffCommand(stereo); remote2.SetCommand(0, garageDoorUpCommand, garageDoorDownCommand); remote2.SetCommand(1, stereoOnCommand, stereoOffCommand); remote2.OnButtonWasPressed(0); remote2.OnButtonWasPressed(1); remote2.OffButtonWasPressed(0); remote2.OffButtonWasPressed(1); remote2.UndoButtonWasPressed(); // Example 3 AdvancedRemote remote3 = new AdvancedRemote(); Fan fan = new Fan(); FanHighCommand fanHighCommand = new FanHighCommand(fan); FanMeduimCommand fanMeduimCommand = new FanMeduimCommand(fan); FanLowCommand fanLowCommand = new FanLowCommand(fan); FanOffCommand fanOffCommand = new FanOffCommand(fan); // Remote from Example 2 Reused remote3.SetCommand(0, fanHighCommand, fanOffCommand); remote3.SetCommand(1, fanMeduimCommand, fanOffCommand); remote3.OnButtonWasPressed(0); // High remote3.OffButtonWasPressed(0); // Off remote3.UndoButtonWasPressed(); // Back To High // Example 4 RoomTV roomTV = new RoomTV(); HotTub hotTub = new HotTub(); HotTubOnCommand hotTubOnCommand = new HotTubOnCommand(hotTub); TVOnCommand tvOnCommand = new TVOnCommand(roomTV); Command[] PartyCommands = new Command[2]; PartyCommands[0] = hotTubOnCommand; PartyCommands[1] = tvOnCommand; MacroCommand macroCommand = new MacroCommand(PartyCommands); // Put All Commands in this MacroCommand AdvancedRemote remote4 = new AdvancedRemote(); remote4.SetCommand(0, macroCommand, new NoCommand()); // No Command for Off Button remote4.OnButtonWasPressed(0); }