고를 위한 예제 명령의 패턴에 대한 UI[마감]
-
08-06-2019 - |
문제
에서 일하고 있어요 WinForm.인터넷 응용 프로그램의 기본적인 UI 를 포함하는 도구 모음 버튼,메뉴 항목을 입력되는 모든 시작과 동일한 기본 코드입니다.지금 이벤트 처리기 위해 이러한 각각의 통화는 일반적인 방법을 수행하는 기능입니다.
에서 무엇을 읽었 활동의 이 유형이 될 수 있에 의해 처리 명령어 디자인 패턴 추가적인 혜택의 자동으로 활성화/비활성화 또는 체크인/취소 UI 요소입니다.
나는 인터넷 검색에 대한 좋은 예제 프로젝트,하지만 정말 없는 하나를 발견했다.누군가는 좋은 예를 공유할 수 있는?
해결책
먼저 확인 우리가 무엇을 알고 있는 명령 패턴은 다음과 같습니다.
명령을 본 캡슐화하는 요청 로 개체고 그것을 알 공용 인터페이스입니다.명령 패턴 모든 객체를받 자신의 명령을 제공한 디커플링 사이 송신자와 수신기가 있습니다.Sender 가는 개체를 호출합니다. 작업,그리고 수신기는 개체 요청을 수신하는 행위에 니다.
여기에 예를 들어 당신을 위해.다음과 같은 여러 가지 방법으로 당신이 할 수 있다,하지만 내가 가지 인터페이스 기본 접근 방식을 만들의 코드를 검사할 수 있습니다.나는 확실하지 않은 무엇이 선호하는 언어로,그러나 내가 이것을 쓰는 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.
}
}
셋째,우리는 설치할 필요가 우리의 호출자 또는 보낸 사람에 개체입니다.
public class TextOperations
{
public void Invoke(ICommand command)
{
command.Execute();
}
}
넷째,클라이언트를 생성합체를 사용하는 호출자/sender 개체입니다.
public class Client
{
static void Main()
{
TextOperations textOperations = new TextOperations();
textOperation.Invoke(new CutCommand());
}
}
나는 당신이 걸릴 수 있습니다 예를 넣어 사용 중인 응용 프로그램에 대해하게 작업을 수행할 수 있습니다.는 경우에 당신은 더 많은 설명입니다.
다른 팁
당신의 오른쪽에는 트랙에 있습니다.기본적으로 당신은 모델을 나타내는 문서입니다.당신이 사용하는 이 모델에서 CutCommand.당신이 원하는 것을 변경하 CutCommand 의 생성자를 받아 당신이 원하는 정보를 잘라.그때 마다,말을 잘라 버튼을 클릭하면,당신은 당신을 호출하는 새로운 CutCommand 고 전달하는 인수에서 생성자입니다.다음 사용이 그 인자 클래스의 경우 실행 방법이라고합니다.
도 오픈 소스,.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)만들 명령을 호출자:
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.