클라이언트의 요청을 객체로 전달하여 다른 요청으로 클라이언트를 매개 변수화 할 수 있습니다. "행동 요청자"및 "동작 구현 자"를 분리하는 데 사용되며,이 둘 사이의 느슨한 커플 링은 변경에 적응하기 위해 달성 될 수 있습니다. 변화하고 변하지 않는 요인을 분리하십시오.
1. 역할
명령
명령의 인터페이스를 정의하고 실행 방법을 선언합니다.
ConcreteCommand
명령 인터페이스 구현 객체는 "가상"구현입니다. 일반적으로 수신기를 보유하고 수신기의 기능을 호출하여 명령에 의해 수행 할 작업을 완료합니다.
수화기
명령을 진정으로 실행하는 객체 인 수신기. 모든 클래스는 명령에 필요한 해당 함수를 구현할 수있는 한 수신자가 될 수 있습니다.
인커
명령 개체는 요청을 실행해야하며 일반적으로 명령 개체를 보유하고 많은 명령 개체를 보유 할 수 있습니다. 이곳에서 클라이언트가 실제로 명령을 트리거하고 해당 작업을 수행하기 위해 명령이 필요합니다. 즉, 명령 개체의 항목을 사용하는 것과 동일합니다.
고객
특정 명령 개체를 작성하고 명령 개체의 수신기를 설정하십시오. 이것은 우리의 기존의 의미에서 클라이언트가 아니라 명령 객체와 수신기를 조립하고 있습니다. 아마도 명령을 사용하는 클라이언트가 Invoker에서 실행을 트리거하는 클라이언트가 있기 때문에이 클라이언트를 어셈블러라고 부르는 것이 좋습니다.
2. 장점
3. 단점 <br /> 명령 모드를 사용하면 일부 시스템이 너무 많은 특정 명령 클래스를 가질 수 있습니다. 각 명령에 특정 명령 클래스가 필요하므로 일부 시스템에는 많은 특정 명령 클래스가 필요할 수 있으며, 이는 명령 모드 사용에 영향을 미칩니다.
IV. 적용 가능한 상황
5. 응용 프로그램 <br /> 시뮬레이션에는 TV 작동을위한 전원 온, 종료 및 변경 명령이 포함됩니다. 코드는 다음과 같습니다
// 명령 공개 인터페이스 명령을 실행하기위한 인터페이스 {void execute (); } // 명령 수신기 수신기 공개 클래스 TV {public int currentChannel = 0; public void turnon () {system.out.println ( "텔레비노이시노가 켜져 있습니다."); } public void turnoff () {System.out.println ( "텔레비전이 꺼져 있습니다."); } public void ChangeChann (int Channel) {this.currentChannel = 채널; System.out.println ( "이제 TV 채널은" + 채널); }} // CONCRETECOMMAND PUBLIC CLASS COMMONTION 구현 명령 {private tv mytv; 공개 사령관 (TV TV) {mytv = TV; } public void execute () {mytv.turnon (); }} // CONCRETECOMMAND PUBLIC CLASS COMMANTOFF 구현 명령 명령을 종료합니다. 공개 사령부 (TV TV) {mytv = TV; } public void execute () {mytv.turnoff (); }} // 채널 스위칭 명령 ConcreteCommand Public Class CommandChange emplements 명령 {private tv mytv; 개인 INT 채널; Public CommandChange (TV TV, Int Channel) {Mytv = TV; this.channel = 채널; } public void execute () {mytv.changechannel (채널); }} // 원격 컨트롤 Invoker Public Class Control {Private Command OnCommand, OffCommand, ChangeChannel; 공공 통제 (명령 ON, 명령 OFF, 명령 채널) {OnCommand = on; OffCommand = OFF; changechannel = 채널; } public void turnon () {oncommand.execute (); } public void turnoff () {offcommand.execute (); } public void changechannel () {changechannel.execute (); }} // 테스트 클라이언트 클라이언트 공개 클라이언트 클라이언트 {public static void main (string [] args) {// 명령 수신자 수신기 TV mytv = new TV (); // Power-on 명령 ConcreteCommond Comoundon On = New Commandon (MYTV); // 전력 오프 명령 ConcreteCommond CommandOff = New Commandoff (MYTV); // 채널 스위칭 명령 CONCRETECMOND COMMANDCHANGE 채널 = New CommandChange (MyTv, 2); // 명령 제어 객체 invoker 컨트롤 제어 = 새로운 제어 (on, Off, Channel); // Power-on Control.Turnon (); // 스위치 채널 컨트롤 .CHANGECHANNE (); // 컨트롤을 종료합니다 .TurnOff (); }} 실행 결과
Televisino가 켜져 있습니다.
이제 TV 채널은 2입니다
텔레비전이 꺼져 있습니다.
6. 요약
1. 명령 모드의 본질은 명령을 캡슐화하고 명령 발행에 대한 책임과 명령 실행에 대한 책임을 분리하는 것입니다.
2. 각 명령은 작업입니다. 요청 당사자는 요청을 발행하여 작업을 수행해야합니다. 수신 당사자는 요청을 받고 작업을 수행합니다.
3. 명령 모드를 사용하면 요청 당사자가 수신 당사자와 독립 할 수있게되므로 요청 당사자가 요청을받는 당사자의 인터페이스를 알 필요가 없으며, 요청이 어떻게 수신되었는지, 언제 및 실행되었는지 여부를 알 필요가 없습니다.
4. 명령 모드는 요청 자체를 객체로 만듭니다.
5. 명령 모드의 키는 추상 명령 인터페이스와 추상 명령 인터페이스의 발신자 프로그램을 도입하는 것입니다. 추상 명령 인터페이스를 구현하는 특정 명령 만 수신기와 관련 될 수 있습니다.
위의 내용은 Java Command Design 패턴에 대한 자세한 소개입니다. 모든 사람의 학습에 도움이되기를 바랍니다.