문제

에서 일하고 있어요 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 편집기 SharpDevelopNotepad++.

가(자연)논의 명령의 패턴에 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top