Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Ищем пример командного шаблона для UI
Я работаю над приложением WinForm .Net с базовым UI, которое включает кнопки панели инструментов, пункты меню и нажатия клавиш, которые все инициируют один и тот же базовый код. Прямо сейчас обработчики событий для каждого из них вызывают общий метод для выполнения функции.
Из того, что я прочитал, этот тип действий может быть обработан шаблоном проектирования команд с дополнительным преимуществом автоматического включения/выключения или проверки/снятия флажков элементов UI.
Я искал в сети хороший примерный проект, но так и не нашел его. Есть ли у кого-нибудь хороший пример, которым можно поделиться?
Давайте сначала убедимся, что мы знаем, что такое шаблон команды:
Команда инкапсулирует запрос как объект и дает ему известное общий интерфейс. Шаблон Команды гарантирует, что каждый объект получит свое собственные команды и обеспечивает развязку между отправителем и получателем. Датчик является объектом, который вызывает операция, а приемник-это объект тот получает запрос и действует дальше оно.
Вот вам пример для подражания. Есть много способов сделать это, но я собираюсь использовать базовый подход интерфейса, чтобы сделать код более тестируемым для вас. Я не знаю, какой язык вы предпочитаете, но я пишу это на C#.
Во-первых, создайте интерфейс, который описывает команду.
public interface ICommand
{
void Execute();
}
Во-вторых, создайте командные объекты, которые будут реализовывать командный интерфейс.
public class CutCommand : ICommand
{
public void Execute()
{
// Put code you like to execute when the CutCommand.Execute method is called.
}
}
В-третьих, нам нужно настроить наш объект invoker или sender.
public class TextOperations
{
public void Invoke(ICommand command)
{
command.Execute();
}
}
В-четвертых, создайте клиентский объект,который будет использовать объект invoker / sender.
public class Client
{
static void Main()
{
TextOperations textOperations = new TextOperations();
textOperation.Invoke(new CutCommand());
}
}
Я надеюсь, что вы можете взять этот пример и использовать его для приложения, над которым вы работаете. Если вы хотите получить дополнительные разъяснения, просто дайте мне знать.
Вы на правильном пути. В основном у вас будет модель, которая представляет документ. Вы будете использовать эту модель в CutCommand. Вы захотите изменить конструктор CutCommand, чтобы принять информацию, которую вы хотите вырезать. Затем каждый раз, когда, скажем, нажимается кнопка Cut, вы вызываете новый CutCommand и передаете аргументы в конструктор. Затем используйте эти аргументы в классе при вызове метода Execute.
Попробуйте open source, .NET редакторы, такие как SharpDevelop или Notepad++ .
Существует (естественно) некоторое обсуждение шаблона команды в http://c2.com/cgi/wiki?CommandPattern это может оказаться полезным.
Qt использует шаблон команд для элементов меню / Панели инструментов.
QActions создаются отдельно от QMenuItem и QToolbar, и действия могут быть назначены QMenuItem и QToolbar с помощью метода setAction() и addAction() соответственно.
http://web.archive.org/web/20100801023349/http://cartan.cas.suffolk.edu/oopdocbook/html/menus.html
http://web.archive.org/web/20100729211835/http://cartan.cas.suffolk.edu/oopdocbook/html/actions.html
Я не могу помочь вам с примером ссылки, но могу привести пример сам.
1) Определите интерфейс ICommand:
public interface ICommand {
void Do();
void Undo();
}
2) Сделайте ваши реализации ICommand для конкретных команд, но также определите абстрактный базовый класс для них:
public abstract class WinFormCommand : ICommand {
}
3) создать команду invoker:
public interface ICommandInvoker {
void Invoke(ICommand command);
void ReDo();
void UnDo();
}
public interface ICommandDirector {
void Enable(ICommand);
void Disable(ICommand);
}
public class WinFormsCommandInvoker : ICommandInvoker, ICommandDirector {
private readonly Dictionary<ICommand, bool> _commands;
private readonly Queue<ICommand> _commandsQueue;
private readonly IButtonDirector _buttonDirector;
// you can define additional queue for support of ReDo operation
public WinFormsCommandInvoker(ICommandsBuilder builder, IButtonDirector buttonDirector) {
_commands = builder.Build();
_buttonDirector = buttonDirector;
_commandsQueue = new Queue<ICommand>();
}
public void Invoke(ICommand command) {
command.Do();
__commandsQueue.Enqueue(command);
}
public void ReDo() {
//you can implement this using additional queue
}
public void UnDo() {
var command = __commandsQueue.Dequeue();
command.Undo();
}
public void Enable(ICommand command) {
_commands.[command] = true;
_buttonDirector.Enable(command);
}
public void Disable(ICommand command) {
_commands.[command] = false;
_buttonDirector.Disable(command);
}
}
4) Теперь вы можете реализовать свои ICommandsBuilder, IButtonDirector и добавить другие интерфейсы, такие как ICheckBoxDirector к WinFormsCommandInvoker.