명령 모드는 많은 코드를 읽은 후에는 디자인 패턴을 이해하는 것이 주로 원칙 구조를 마스터하는 것이라고 생각했습니다. 실제 프로그래밍에서. 명령 모드는 실제로 매우 구체적인 모델이 아니며, 사람들이 약간 혼란스러워하는 것은 바로이 유연성입니다.
명령 정의
많은 명령 모드 코드는 그래픽 인터페이스를 대상으로합니다.
이 명령을 클래스로 캡슐화 한 다음 사용자 (발신자)는이 클래스에서 작동합니다. . ((발신자), 문서를 열는 코드를 직접 가리키고 명령 모드를 사용합니다. 즉,이 둘 사이에 중간체를 추가 하고이 직접적인 관계를 위반하고 기본적으로 관계를 분리하는 것을 의미합니다.
분명히이를 수행하는 이점은 포장의 특성을 준수하고 커플 링을 줄이는 것이 동작을 캡슐화하는 전형적인 패턴이며, 공장은 캡슐화를 생성하는 패턴입니다.
명령 모드에서, 나는 또한 디자인 모드의 "일반적인 문제"를 발견했다. 나는 단순한 문제를 복잡하게하고, 다른 클래스에 타사를 추가하는 것을 좋아한다. 코드의 재사용.
명령 모드를 사용하는 방법
특정 명령 모드 코드는 다양한 시스템, 다른 시스템을 캡슐화하는 방법이 있기 때문에 다양합니다. 다음 예는 컬렉션 목록에 명령을 캡슐화하는 것입니다.
일반적인 명령 모드에는 인터페이스가 필요합니다. 인터페이스에는 통합 된 메소드가 있으며, 이는 "명령/요청을 객체에 캡슐화"입니다.
코드 사본은 다음과 같습니다.
공개 인터페이스 명령 {
공개 초록 void execute ();
}
특정 명령/요청 코드는 인터페이스 명령을 구현하는 것이며 아래에는 세 가지 특정 명령이 있습니다.
코드 사본은 다음과 같습니다.
공개 클래스 엔지니어 구현 명령 {
public void execute () {
// 엔지니어의 명령을 수행합니다
}
}
공개 클래스 프로그래머 구현 명령 {
public void execute () {
// 프로그래머의 명령을 수행합니다
}
}
공공 계급 정치인은 명령 {
public void execute () {
// 정치인의 명령을 수행합니다
}
}
평소와 같이이 세 가지 명령을 직접 호출 할 수 있지만 명령 모드를 사용하여 캡슐화하여 블랙 박스 목록에 던져야합니다.
코드 사본은 다음과 같습니다.
공개 클래스 프로듀서 {
public static list produceerequests () {
목록 큐 = New ArrayList ();
queue.add (new amesticEngineer ());
queue.add (새로운 정치인 ());
queue.add (새 프로그래머 ());
반환 대기열;
}
}
이 세 명령이 목록에 들어가면 나중에 외관 특성을 잃어 버렸습니다.
코드 사본은 다음과 같습니다.
공개 수업 testCommand {
public static void main (String [] args) {
목록 큐 = Producer.produceRequests ();
for (iterator it = queue.iterator (); hasnext ();)
// 목록의 중간 및 기타 기능을 꺼내면 하나의 기능이 100% 올바른지 확인할 수 없습니다.
// 그들은 적어도 인터페이스 명령의 "아들"이므로 캐스트 유형은 인터페이스 명령입니다.
((명령) it.next ()). execute ();
}
}
발신자는 기본적으로 인터페이스를 다루고 특정 구현과 상호 작용하지 않는다는 것을 알 수 있습니다. 발신자 TestCommand에서 코드를 수정할 필요가 없습니다.
위의 코드의 핵심 원칙을 이해 한 후에는 모든 사람이 호출자와 특정 명령을 분리하는 방법에서 자신의 방법을 사용해야합니다. 위의 코드는 "목록에서 통과하는 방법"이 있습니다. . 이 접근법은 시연을위한 것입니다.
명령 모드를 사용해야하는 좋은 이유는 또한 실행 취소 기능을 구현할 수 있기 때문에 각 특정 명령은 방금 수행 한 작업을 기억하고 필요한 경우 복원 할 수 있습니다.
명령 모드는 인터페이스 설계에서 널리 사용됩니다. Java Swing 사용 명령 모드의 메뉴는 여전히 인터페이스 디자인의 성능이 부족하기 때문에 인터넷에 많은 예제가 있습니다.