14. COMMAND(명령 모드)

3452 단어

의 목적


하나의 요청을 하나의 대상으로 봉하여 서로 다른 요청을 사용하여 고객을 매개 변수화할 수 있도록 한다.요청에 대해 로그를 정렬하거나 기록하고 취소 가능한 작업을 지원합니다.

장점


4
  • 시스템의 결합도를 낮춘다.명령 모드는 호출된 조작 대상과 이 조작을 실현한 대상을 결합시킬 수 있다

  • 4
  • 명령을 추가하거나 삭제하는 것이 매우 편리합니다.명령 모드의 증가와 삭제 명령은 다른 종류에 영향을 주지 않기 때문에 그는'개폐원칙'을 만족시키고 확장보다 유연하다

  • 4
  • 매크로 명령을 사용할 수 있습니다.민공 모드는 조합 모드와 결합하여 여러 명령을 하나의 조합 명령, 즉 매크로 명령으로 조립할 수 있다

  • 4
  • Undo 및 Redo 작업을 쉽게 수행할 수 있습니다.명령 모드는 비망록 모드와 결합하여 명령의 철회와 복구를 실현할 수 있다

  • 사용 예


    고등학교 때 샤오진은 여름방학 때 심심해서 호텔에 가서 아르바이트를 했다.이 상황에서 그는 명령 모드를 사용해서 주문했다.식당 안에는 모두 두 명의 요리사가 있는데 이것은 분류도에 속하는 Concrete Receiver로 각각 중식 요리사와 양식 요리사이다.모두 두 가지 요리가 있는데 그것이 바로 붉은 소고기와 샐러드인데 이것은 분류도의 Concrete Command에 해당한다.
    명령은 요리사가 요리를 할 수 있도록 쿠킹 () 함수를 호출합니다.세부 코드는 다음과 같습니다.
    package command;
    
    /**
     *  , 
     */
    public interface Chief {
        void cooking(String name);
    }
    
    
    package command;
    
    /**
     *  
     */
    public class ChineseChief implements Chief {
        @Override
        public void cooking(String name){
            System.out.println(" " + name);
        }
    }
    
    
    package command;
    
    /**
     *  
     */
    public class WesternChief implements Chief {
        public void cooking(String name){
            System.out.println(" "+ name);
        }
    }
    
    
    package command;
    /**
     *  
     */
    public interface Food {
        void cooking();
    }
    
    package command;
    
    /**
     *  , 
     */
    public class BraisedPork implements Food{
        private Chief chief;
        public BraisedPork(Chief chief){
            this.chief = chief;
        }
        public void cooking(){
            chief.cooking(" ");
        }
    }
    
    package command;
    
    public class Salad implements Food {
        private Chief chief;
        public Salad(Chief chief){
            this.chief = chief;
        }
        public void cooking(){
            chief.cooking(" ");
        }
    }
    
    
    package command;
    
    /**
     *  
     */
    public class Server {
        String name;
        Food food1,food2,food3;
        private Server(Builder builder){
            this.name = builder.name;
            this.food1 = builder.food1;
            this.food2 = builder.food2;
            this.food3 = builder.food3;
        }
    
        /**
         *  , 
         */
        public void deliver(){
            if (food1 != null){
                food1.cooking();
            }
            if(food2 != null){
                food2.cooking();
            }
            if(food3 != null){
                food3.cooking();
            }
        }
    
        public static class Builder{
            String name;
            private Food food1;
            private Food food2;
            private Food food3;
            public Builder(String name){
                this.name = name;
            }
            public Builder food1(Food food){
                this.food1 = food;
                return this;
            }
            public Builder food2(Food food){
                this.food2 = food;
                return this;
            }
            public Builder food3(Food food){
                this.food3 = food;
                return this;
            }
            public Server builder(){
                return new Server(this);
            }
        }
    }
    
    package command;
    
    public class Client {
        public static void main(String[] args) {
            Chief chineseChief = new ChineseChief();
            Chief westernChief = new WesternChief();
    
            Food braisePork = new BraisedPork(chineseChief);
            Food salad = new Salad(westernChief);
            Server server = new Server.Builder(" ").food1(braisePork).food2(salad).builder();
            server.deliver();
        }
    }
    

    출력 결과는 다음과 같습니다.
     
     
    

    좋은 웹페이지 즐겨찾기