lab3
This commit is contained in:
20
Lab2/src/Factory/AbstractToolFatory.cs
Normal file
20
Lab2/src/Factory/AbstractToolFatory.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Абстрактная фабрика ручных и электрических инструментов
|
||||
/// </summary>
|
||||
public abstract class AbstractToolFactory : IToolFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание ручного инструмента
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр ручного инструмента</returns>
|
||||
public abstract ManualTool CreateManualTool();
|
||||
|
||||
/// <summary>
|
||||
/// Создание электрического инструмента
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр электрического инструмента</returns>
|
||||
public abstract ElectricTool CreateElectricTool();
|
||||
}
|
||||
}
|
||||
20
Lab2/src/Factory/IToolFactory.cs
Normal file
20
Lab2/src/Factory/IToolFactory.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Интерфейс фабрики ручных и электрических инструментов
|
||||
/// </summary>
|
||||
public interface IToolFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание ручного инструмента
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр ручного инструмента</returns>
|
||||
ManualTool CreateManualTool();
|
||||
|
||||
/// <summary>
|
||||
/// Создание электрического инструмента
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр электрического инструмента</returns>
|
||||
ElectricTool CreateElectricTool();
|
||||
}
|
||||
}
|
||||
55
Lab2/src/Factory/PrototypeFactory.cs
Normal file
55
Lab2/src/Factory/PrototypeFactory.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабрика прототипов ручных и электрических инструментов
|
||||
/// </summary>
|
||||
public class PrototypeFactory : AbstractToolFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Прототип ручного инструмента
|
||||
/// </summary>
|
||||
private ManualTool _manualTool;
|
||||
/// <summary>
|
||||
/// Прототип электрического инструмента
|
||||
/// </summary>
|
||||
private ElectricTool _electricTool;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="parManualTool">Прототип ручного инструмента</param>
|
||||
/// <param name="parElectricTool">Прототип электрического инструмента</param>
|
||||
/// <exception cref="ArgumentNullException">Выбрасывается, когда один из параметров равен null</exception>
|
||||
public PrototypeFactory(ManualTool parManualTool, ElectricTool parElectricTool)
|
||||
{
|
||||
if (parManualTool == null)
|
||||
throw new ArgumentNullException(nameof(parManualTool));
|
||||
|
||||
if (parElectricTool == null)
|
||||
throw new ArgumentNullException(nameof(parElectricTool));
|
||||
|
||||
_manualTool = parManualTool;
|
||||
_electricTool = parElectricTool;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание ручного инструмента по прототипу
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр ручного инструмента</returns>
|
||||
public override ManualTool CreateManualTool()
|
||||
{
|
||||
return (ManualTool)_manualTool.Clone();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание электрического инструмента по прототипу
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр электрического инструмента</returns>
|
||||
public override ElectricTool CreateElectricTool()
|
||||
{
|
||||
return (ElectricTool)_electricTool.Clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
26
Lab2/src/Factory/ScissorsAndTrimmerFactory.cs
Normal file
26
Lab2/src/Factory/ScissorsAndTrimmerFactory.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабрика ножниц и тримеров
|
||||
/// </summary>
|
||||
public class ScissorsAndTrimmerFactory : AbstractToolFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание ножниц
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр ножниц</returns>
|
||||
public override ManualTool CreateManualTool()
|
||||
{
|
||||
return new Scissors("Si00", Material.Wood, 1, 1, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание тримера
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр тримера</returns>
|
||||
public override ElectricTool CreateElectricTool()
|
||||
{
|
||||
return new Trimmer("Tr00", Material.Wood, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
26
Lab2/src/Factory/ScytheAndLawnmowerFactory.cs
Normal file
26
Lab2/src/Factory/ScytheAndLawnmowerFactory.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабрика кос и газонокосилок
|
||||
/// </summary>
|
||||
public class ScytheAndLawnmowerFactory : AbstractToolFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание косы
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр косы</returns>
|
||||
public override ManualTool CreateManualTool()
|
||||
{
|
||||
return new Scythe("Sc00", Material.Wood, 1, 1, BladeType.Straight);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание газонокосилки
|
||||
/// </summary>
|
||||
/// <returns>Экземпляр газонокосилки</returns>
|
||||
public override ElectricTool CreateElectricTool()
|
||||
{
|
||||
return new Lawnmower("La00", Material.Wood, 1, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
14
Lab2/src/FactoryMethod/IToolFactoryMethod.cs
Normal file
14
Lab2/src/FactoryMethod/IToolFactoryMethod.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабричный метод для создания фабрик
|
||||
/// </summary>
|
||||
public interface IToolFactoryMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание фабрики
|
||||
/// </summary>
|
||||
/// <returns>Фабрика</returns>
|
||||
IToolFactory CreateFactory();
|
||||
}
|
||||
}
|
||||
36
Lab2/src/FactoryMethod/PrototypeFactoryMethod.cs
Normal file
36
Lab2/src/FactoryMethod/PrototypeFactoryMethod.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using Lab2;
|
||||
using System;
|
||||
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабричный метод для фабрики прототипов
|
||||
/// </summary>
|
||||
public class PrototypeFactoryMethod : IToolFactoryMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание фабрики прототипов
|
||||
/// </summary>
|
||||
/// <returns>Фабрика прототипов</returns>
|
||||
/// <exception cref="InvalidOperationException">Выбрасывается, когда нельзя создать фабрику</exception>
|
||||
public IToolFactory CreateFactory()
|
||||
{
|
||||
var scissors = new Scissors("", Material.Wood, 1, 1, 1);
|
||||
var lawnmower = new Lawnmower("", Material.Wood, 1, 1, 1);
|
||||
|
||||
if (Util.ShowEditForm(scissors, false, true) && Util.ShowEditForm(lawnmower, false, true))
|
||||
return new PrototypeFactory(scissors, lawnmower);
|
||||
|
||||
throw new InvalidOperationException("Can't create factory");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получения названия создаваемой фабрики
|
||||
/// </summary>
|
||||
/// <returns>Название</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return "Prototype Factory";
|
||||
}
|
||||
}
|
||||
}
|
||||
26
Lab2/src/FactoryMethod/ScissorsAndTrimmerFactoryMethod.cs
Normal file
26
Lab2/src/FactoryMethod/ScissorsAndTrimmerFactoryMethod.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабричный метод для фабрик ножниц и тримеров
|
||||
/// </summary>
|
||||
public class ScissorsAndTrimmerFactoryMethod : IToolFactoryMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание фабрики ножниц и тримеров
|
||||
/// </summary>
|
||||
/// <returns>Фабрика ножниц и тримеров</returns>
|
||||
public IToolFactory CreateFactory()
|
||||
{
|
||||
return new ScissorsAndTrimmerFactory();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получения названия создаваемой фабрики
|
||||
/// </summary>
|
||||
/// <returns>Название</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return "Scissors and Trimmer Factory";
|
||||
}
|
||||
}
|
||||
}
|
||||
26
Lab2/src/FactoryMethod/ScytheAndLawnmowerFactoryMethod.cs
Normal file
26
Lab2/src/FactoryMethod/ScytheAndLawnmowerFactoryMethod.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Patterns
|
||||
{
|
||||
/// <summary>
|
||||
/// Фабричный метод для фабрик кос и газонокосилок
|
||||
/// </summary>
|
||||
public class ScytheAndLawnmowerFactoryMethod : IToolFactoryMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// Создание фабрики кос и газонокосилок
|
||||
/// </summary>
|
||||
/// <returns>Фабрика кос и газонокосилок</returns>
|
||||
public IToolFactory CreateFactory()
|
||||
{
|
||||
return new ScytheAndLawnmowerFactory();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получения названия создаваемой фабрики
|
||||
/// </summary>
|
||||
/// <returns>Название</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return "Scythe and Lawnmower Factory";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,6 @@
|
||||
<TextBox x:Name="_fuelСapacityTextBox" Grid.Row="4" Grid.Column="1" Margin="5,5,5,5" Text="{Binding FuelCapacity, UpdateSourceTrigger=Explicit}" />
|
||||
|
||||
<Button Name="_saveButton" Click="SaveButton_Click" Content="Save" Grid.Row="5" Grid.Column="0" Margin="5,5,5,5" />
|
||||
<Button Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Name="_cancelButton" Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -20,6 +20,10 @@ namespace Lab2
|
||||
/// </summary>
|
||||
private readonly bool _readOnly;
|
||||
/// <summary>
|
||||
/// Признак невозможности отмены
|
||||
/// </summary>
|
||||
private readonly bool _isForced;
|
||||
/// <summary>
|
||||
/// Газонокосилка для редактирования
|
||||
/// </summary>
|
||||
private readonly Lawnmower _lawnmower;
|
||||
@@ -29,8 +33,9 @@ namespace Lab2
|
||||
/// </summary>
|
||||
/// <param name="parLawnmower">Газонокосилка для редактирования</param>
|
||||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||||
/// <param name="parIsForced">Признак невозможности отмены</param>
|
||||
/// <exception cref="ArgumentNullException">Выбрасывается, когда газонокосилка равна null</exception>
|
||||
public CreateLawnmower(Lawnmower parLawnmower, bool parReadOnly = false)
|
||||
public CreateLawnmower(Lawnmower parLawnmower, bool parReadOnly = false, bool parIsForced = false)
|
||||
{
|
||||
if (parLawnmower == null)
|
||||
throw new ArgumentNullException(nameof(parLawnmower));
|
||||
@@ -41,6 +46,7 @@ namespace Lab2
|
||||
|
||||
_lawnmower = parLawnmower;
|
||||
_readOnly = parReadOnly;
|
||||
_isForced = parIsForced;
|
||||
DataContext = _lawnmower;
|
||||
|
||||
Title = $"Lawnmower {_lawnmower.Id}";
|
||||
@@ -49,6 +55,9 @@ namespace Lab2
|
||||
|
||||
if (_readOnly)
|
||||
_saveButton.Content = "Ok";
|
||||
|
||||
if (_isForced)
|
||||
_cancelButton.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -92,7 +101,12 @@ namespace Lab2
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
if (!_save)
|
||||
{
|
||||
if (_isForced)
|
||||
e.Cancel = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
<TextBox x:Name="_bladeSizeTextBox" Grid.Row="4" Grid.Column="1" Margin="5,5,5,5" Text="{Binding BladeSize, UpdateSourceTrigger=Explicit}" />
|
||||
|
||||
<Button Name="_saveButton" Click="SaveButton_Click" Content="Save" Grid.Row="5" Grid.Column="0" Margin="5,5,5,5" />
|
||||
<Button Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Name="_cancelButton" Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -20,6 +20,10 @@ namespace Lab2
|
||||
/// </summary>
|
||||
private readonly bool _readOnly;
|
||||
/// <summary>
|
||||
/// Признак невозможности отмены
|
||||
/// </summary>
|
||||
private readonly bool _isForced;
|
||||
/// <summary>
|
||||
/// Ножницы для редактирования
|
||||
/// </summary>
|
||||
private readonly Scissors _scissors;
|
||||
@@ -29,8 +33,9 @@ namespace Lab2
|
||||
/// </summary>
|
||||
/// <param name="parScissors">Ножницы для редактирования</param>
|
||||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||||
/// <param name="parIsForced">Признак невозможности отмены</param>
|
||||
/// <exception cref="ArgumentNullException">Выбрасывается, когда ножницы равны null</exception>
|
||||
public CreateScissors(Scissors parScissors, bool parReadOnly = false)
|
||||
public CreateScissors(Scissors parScissors, bool parReadOnly = false, bool parIsForced = false)
|
||||
{
|
||||
if (parScissors == null)
|
||||
throw new ArgumentNullException(nameof(parScissors));
|
||||
@@ -41,6 +46,7 @@ namespace Lab2
|
||||
|
||||
_scissors = parScissors;
|
||||
_readOnly = parReadOnly;
|
||||
_isForced = parIsForced;
|
||||
DataContext = _scissors;
|
||||
|
||||
Title = $"Scissors {_scissors.Id}";
|
||||
@@ -49,6 +55,9 @@ namespace Lab2
|
||||
|
||||
if (_readOnly)
|
||||
_saveButton.Content = "Ok";
|
||||
|
||||
if (_isForced)
|
||||
_cancelButton.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -92,7 +101,12 @@ namespace Lab2
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
if (!_save)
|
||||
{
|
||||
if (_isForced)
|
||||
e.Cancel = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
<ComboBox x:Name="_bladeTypeComboBox" Grid.Row="4" Grid.Column="1" Margin="5,5,5,5" Text="{Binding BladeType, UpdateSourceTrigger=Explicit}" />
|
||||
|
||||
<Button Name="_saveButton" Click="SaveButton_Click" Content="Save" Grid.Row="5" Grid.Column="0" Margin="5,5,5,5" />
|
||||
<Button Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Name="_cancelButton" Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -20,6 +20,10 @@ namespace Lab2
|
||||
/// </summary>
|
||||
private readonly bool _readOnly;
|
||||
/// <summary>
|
||||
/// Признак невозможности отмены
|
||||
/// </summary>
|
||||
private readonly bool _isForced;
|
||||
/// <summary>
|
||||
/// Коса для редактирования
|
||||
/// </summary>
|
||||
private readonly Scythe _scythe;
|
||||
@@ -29,8 +33,9 @@ namespace Lab2
|
||||
/// </summary>
|
||||
/// <param name="parScythe">Коса для редактирования</param>
|
||||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||||
/// <param name="parIsForced">Признак невозможности отмены</param>
|
||||
/// <exception cref="ArgumentNullException">Выбрасывается, когда коса равна null</exception>
|
||||
public CreateScythe(Scythe parScythe, bool parReadOnly = false)
|
||||
public CreateScythe(Scythe parScythe, bool parReadOnly = false, bool parIsForced = false)
|
||||
{
|
||||
if (parScythe == null)
|
||||
throw new ArgumentNullException(nameof(parScythe));
|
||||
@@ -42,6 +47,7 @@ namespace Lab2
|
||||
|
||||
_scythe = parScythe;
|
||||
_readOnly = parReadOnly;
|
||||
_isForced = parIsForced;
|
||||
DataContext = _scythe;
|
||||
|
||||
Title = $"Scythe {_scythe.Id}";
|
||||
@@ -50,6 +56,9 @@ namespace Lab2
|
||||
|
||||
if (_readOnly)
|
||||
_saveButton.Content = "Ok";
|
||||
|
||||
if (_isForced)
|
||||
_cancelButton.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -93,7 +102,12 @@ namespace Lab2
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
if (!_save)
|
||||
{
|
||||
if (_isForced)
|
||||
e.Cancel = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
<ComboBox x:Name="_modeComboBox" Grid.Row="4" Grid.Column="1" Margin="5,5,5,5" Text="{Binding Mode, UpdateSourceTrigger=Explicit}" />
|
||||
|
||||
<Button Name="_saveButton" Click="SaveButton_Click" Content="Save" Grid.Row="5" Grid.Column="0" Margin="5,5,5,5" />
|
||||
<Button Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Name="_cancelButton" Content="Cancel" IsCancel="True" Grid.Row="5" Grid.Column="1" Margin="5,5,5,5" />
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -20,6 +20,10 @@ namespace Lab2
|
||||
/// </summary>
|
||||
private readonly bool _readOnly;
|
||||
/// <summary>
|
||||
/// Признак невозможности отмены
|
||||
/// </summary>
|
||||
private readonly bool _isForced;
|
||||
/// <summary>
|
||||
/// Триммер для редактирования
|
||||
/// </summary>
|
||||
private readonly Trimmer _trimmer;
|
||||
@@ -29,8 +33,9 @@ namespace Lab2
|
||||
/// </summary>
|
||||
/// <param name="parTrimmer">Триммер для редактирования</param>
|
||||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||||
/// <param name="parIsForced">Признак невозможности отмены</param>
|
||||
/// <exception cref="ArgumentNullException">Выбрасывается, когда триммер равен null</exception>
|
||||
public CreateTrimmer(Trimmer parTrimmer, bool parReadOnly = false)
|
||||
public CreateTrimmer(Trimmer parTrimmer, bool parReadOnly = false, bool parIsForced = false)
|
||||
{
|
||||
if (parTrimmer == null)
|
||||
throw new ArgumentNullException(nameof(parTrimmer));
|
||||
@@ -42,6 +47,7 @@ namespace Lab2
|
||||
|
||||
_trimmer = parTrimmer;
|
||||
_readOnly = parReadOnly;
|
||||
_isForced = parIsForced;
|
||||
DataContext = _trimmer;
|
||||
|
||||
Title = $"Trimmer {_trimmer.Id}";
|
||||
@@ -50,6 +56,9 @@ namespace Lab2
|
||||
|
||||
if (_readOnly)
|
||||
_saveButton.Content = "Ok";
|
||||
|
||||
if (_isForced)
|
||||
_cancelButton.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -93,7 +102,12 @@ namespace Lab2
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
if (!_save)
|
||||
{
|
||||
if (_isForced)
|
||||
e.Cancel = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -17,20 +17,19 @@
|
||||
<Grid Grid.Row="0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1.15*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="1.1*"/>
|
||||
<ColumnDefinition Width="1.45*"/>
|
||||
<ColumnDefinition Width="0.8*"/>
|
||||
<ColumnDefinition Width="0.8*"/>
|
||||
<ColumnDefinition Width="0.8*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Button Click="CreateScissorsButton_Click" Content="Add Scissors" Grid.Column="0" Margin="5,5,5,5" />
|
||||
<Button Click="CreateScytheButton_Click" Content="Add Scythe" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Click="CreateTrimmerButton_Click" Content="Add Trimmer" Grid.Column="2" Margin="5,5,5,5" />
|
||||
<Button Click="CreateLawnmowerButton_Click" Content="Add Lawnmower" Grid.Column="3" Margin="5,5,5,5" />
|
||||
<Button Click="EditSelectedButton_Click" Content="Edit" Grid.Column="4" Margin="5,5,5,5" />
|
||||
<Button Click="DeleteSelectedButton_Click" Content="Delete" Grid.Column="5" Margin="5,5,5,5" />
|
||||
<Button Click="GenerateButton_Click" Content="Generate" Grid.Column="6" Margin="5,5,5,5" />
|
||||
|
||||
<ComboBox IsEditable="False" Grid.Column="0" Margin="5,5,5,5" ItemsSource="{Binding FactoryMethods}" SelectedItem="{Binding SelectedMethod}" />
|
||||
<Button Click="CreateManualToolButton_Click" Content="Add Manual Tool" Grid.Column="1" Margin="5,5,5,5" />
|
||||
<Button Click="CreateElectricToolButton_Click" Content="Add Electric Tool" Grid.Column="2" Margin="5,5,5,5" />
|
||||
<Button Click="EditSelectedButton_Click" Content="Edit" Grid.Column="3" Margin="5,5,5,5" />
|
||||
<Button Click="DeleteSelectedButton_Click" Content="Delete" Grid.Column="4" Margin="5,5,5,5" />
|
||||
<Button Click="GenerateButton_Click" Content="Generate" Grid.Column="5" Margin="5,5,5,5" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Collections.ObjectModel;
|
||||
using Patterns;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Lab2
|
||||
{
|
||||
@@ -19,6 +22,44 @@ namespace Lab2
|
||||
/// </summary>
|
||||
private Random _random = new();
|
||||
|
||||
/// <summary>
|
||||
/// Список фабрик
|
||||
/// </summary>
|
||||
private List<IToolFactoryMethod> _factoryMethods = new()
|
||||
{
|
||||
new ScissorsAndTrimmerFactoryMethod(),
|
||||
new ScytheAndLawnmowerFactoryMethod(),
|
||||
new PrototypeFactoryMethod(),
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Текущая фабрика
|
||||
/// </summary>
|
||||
private IToolFactory _currentFactory;
|
||||
|
||||
/// <summary>
|
||||
/// Выбранный фабричный метод
|
||||
/// </summary>
|
||||
private IToolFactoryMethod _selectedMethod;
|
||||
|
||||
/// <summary>
|
||||
/// Список фабрик
|
||||
/// </summary>
|
||||
public ICollection<IToolFactoryMethod> FactoryMethods => _factoryMethods;
|
||||
|
||||
/// <summary>
|
||||
/// Выбранный фабричный метод
|
||||
/// </summary>
|
||||
public IToolFactoryMethod SelectedMethod
|
||||
{
|
||||
get => _selectedMethod;
|
||||
set
|
||||
{
|
||||
_selectedMethod = value;
|
||||
_currentFactory = value.CreateFactory();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
@@ -26,6 +67,9 @@ namespace Lab2
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
SelectedMethod = _factoryMethods.First();
|
||||
|
||||
DataContext = this;
|
||||
_dataGrid.ItemsSource = _tools;
|
||||
}
|
||||
|
||||
@@ -51,33 +95,6 @@ namespace Lab2
|
||||
return _tools[_dataGrid.SelectedIndex];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Открывает форму редактирования
|
||||
/// </summary>
|
||||
/// <param name="parTool"> Инструмент </param>
|
||||
/// <returns> True, если редактирование прошло успешно, иначе - false </returns>
|
||||
private bool ShowEditForm(Tool parTool, bool parReadOnly = false)
|
||||
{
|
||||
Window? form = parTool switch
|
||||
{
|
||||
Scissors scissors => new CreateScissors(scissors, parReadOnly),
|
||||
Scythe scythe => new CreateScythe(scythe, parReadOnly),
|
||||
Trimmer trimmer => new CreateTrimmer(trimmer, parReadOnly),
|
||||
Lawnmower lawnmower => new CreateLawnmower(lawnmower, parReadOnly),
|
||||
_ => null,
|
||||
};
|
||||
|
||||
if (form == null)
|
||||
return false;
|
||||
|
||||
var result = form.ShowDialog();
|
||||
|
||||
_dataGrid.Items.Refresh();
|
||||
|
||||
return result ?? false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Генерирует случайный триммер
|
||||
/// </summary>
|
||||
@@ -115,47 +132,23 @@ namespace Lab2
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события нажатия на кнопку "Add Scissors"
|
||||
/// Обработчик события нажатия на кнопку "Add Manual Tool"
|
||||
/// </summary>
|
||||
private void CreateScissorsButton_Click(object sender, RoutedEventArgs e)
|
||||
private void CreateManualToolButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var scissors = new Scissors("", Material.Wood, 1, 1, 1);
|
||||
|
||||
if (ShowEditForm(scissors))
|
||||
_tools.Add(scissors);
|
||||
var tool = _currentFactory.CreateManualTool();
|
||||
if (Util.ShowEditForm(tool))
|
||||
_tools.Add(tool);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события нажатия на кнопку "Add Scythe"
|
||||
/// Обработчик события нажатия на кнопку "Add Electric Tool"
|
||||
/// </summary>
|
||||
private void CreateScytheButton_Click(object sender, RoutedEventArgs e)
|
||||
private void CreateElectricToolButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var scythe = new Scythe("", Material.Wood, 1, 1, BladeType.Straight);
|
||||
|
||||
if (ShowEditForm(scythe))
|
||||
_tools.Add(scythe);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события нажатия на кнопку "Add Trimmer"
|
||||
/// </summary>
|
||||
private void CreateTrimmerButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var trimmer = new Trimmer("", Material.Wood, 1, 1);
|
||||
|
||||
if (ShowEditForm(trimmer))
|
||||
_tools.Add(trimmer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события нажатия на кнопку "Add Lawnmower"
|
||||
/// </summary>
|
||||
private void CreateLawnmowerButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var lawnmower = new Lawnmower("", Material.Wood, 1, 1, 1);
|
||||
|
||||
if (ShowEditForm(lawnmower))
|
||||
_tools.Add(lawnmower);
|
||||
var tool = _currentFactory.CreateElectricTool();
|
||||
if (Util.ShowEditForm(tool))
|
||||
_tools.Add(tool);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -167,7 +160,9 @@ namespace Lab2
|
||||
if (item == null)
|
||||
return;
|
||||
|
||||
ShowEditForm(item);
|
||||
Util.ShowEditForm(item);
|
||||
|
||||
_dataGrid.Items.Refresh();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -179,7 +174,7 @@ namespace Lab2
|
||||
if (selected == null)
|
||||
return;
|
||||
|
||||
if (!ShowEditForm(selected, true))
|
||||
if (!Util.ShowEditForm(selected, true))
|
||||
return;
|
||||
|
||||
_tools.Remove(selected);
|
||||
|
||||
34
Lab2/src/Form/Util.cs
Normal file
34
Lab2/src/Form/Util.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System.Windows;
|
||||
|
||||
namespace Lab2
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс для утилит форм
|
||||
/// </summary>
|
||||
public static class Util
|
||||
{
|
||||
/// <summary>
|
||||
/// Открывает форму редактирования
|
||||
/// </summary>
|
||||
/// <param name="parTool"> Инструмент </param>
|
||||
/// <returns> True, если редактирование прошло успешно, иначе - false </returns>
|
||||
public static bool ShowEditForm(Tool parTool, bool parReadOnly = false, bool parIsForced = false)
|
||||
{
|
||||
Window? form = parTool switch
|
||||
{
|
||||
Scissors scissors => new CreateScissors(scissors, parReadOnly, parIsForced),
|
||||
Scythe scythe => new CreateScythe(scythe, parReadOnly, parIsForced),
|
||||
Trimmer trimmer => new CreateTrimmer(trimmer, parReadOnly, parIsForced),
|
||||
Lawnmower lawnmower => new CreateLawnmower(lawnmower, parReadOnly, parIsForced),
|
||||
_ => null,
|
||||
};
|
||||
|
||||
if (form == null)
|
||||
return false;
|
||||
|
||||
var result = form.ShowDialog();
|
||||
|
||||
return result ?? false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user