Шаблон объекта команды является тем, который я до сих пор не смог по-настоящему понять, и я нашел реализацию в коде, над которым я сейчас работаю, поэтому я долго изучал его, чтобы понять, смогу ли я наконец получить его с помощьюпример из реального мира.Проблема в том, что я уверен, что это не реализовано должным образом, и это просто попытка кого-то, кто просто прочитал об этом и подумал, что это имеет смысл здесь.
Позвольте мне показать это вам (по соображениям конфиденциальности этобудет очень упрощен, но я приложу все усилия, чтобы показать основные понятия):
public class CommandOne
{
public CommandOne(Manager manager, MyForm form)
{
m_manager = manager;
m_form = form;
}
public void Execute()
{
m_manager.CommandOne(m_form);
}
}
public class CommandTwo
{
public CommandTwo(Manager manager, MyForm form)
{
m_manager = manager;
m_form = form;
}
public void Execute()
{
m_manager.CommandTwo(m_form);
}
}
Первое, что кажется мне странным, это то, что эти два класса не наследуются ни от какого абстрактного класса, ни реализуютобщий интерфейс.
Код, который использует эти команды, выглядит следующим образом:
public class MyForm : System.Windows.Forms.Form
{
public MyForm(Manager manager)
{
m_manager = manager;
}
private void SomeMethod()
{
....
var cmd = new CommandOne(manager, this);
cmd.Execute();
...
}
private void OtherMethod()
{
....
var cmd = new CommandTwo(manager, this);
cmd.Execute();
...
}
}
Таким образом, на мой взгляд, эта форма абсолютно связана со всеми участвующими классами, кроме менеджера, который являетсявводится в него через его конструкторы.Так что с этим кодом я действительно не вижу никакой выгоды от создания «командных» классов, которые в основном просто делегируют вызов методам менеджера, так как форма создает их экземпляры, когда они им нужны, и сразу вызывает метод execute.
Так может кто-нибудь объяснить, какие части, если таковые имеются, отсутствует в этой реализации, чтобы действительно быть шаблоном командного объекта, и, хотя это может быть слишком субъективно, какая польза от его реализации в этом случае?
Спасибо.