23가지 디자인 모드 - 명령 모드(러시아 블록)

3352 단어
정의: 하나의 요청을 하나의 대상으로 봉하여 사용자가 서로 다른 요청을 사용하여 클라이언트를 매개 변수화하도록 한다.요청에 대해 줄을 서거나 요청 로그를 기록하고 취소 가능한 작업을 지원합니다.장면 사용: 1. 실행될 동작을 추상화한 다음에 매개 변수의 형식으로 제공해야 한다. 프로세스 디자인에서의 리셋 메커니즘과 유사하고 명령 모델은 정식으로 리셋 메커니즘의 대상을 대상으로 하는 대체품이다.2. 서로 다른 시간에 요청을 지정하고 배열하며 집행한다.명령 대상은 초기 요청과 무관한 생존 기간을 가질 수 있다.3. 취소 작업을 지원해야 한다.4. 로그 수정 기능을 지원하여 시스템이 붕괴될 때 이 수정을 다시 할 수 있습니다.5. 사무 조작을 지원해야 한다.
러시아 블록의 간단한 실현
/**
 *  
 */
public class TetrisMachine {
    /**
     *  " " 
     */
    public void toLeft() {
        Log.e(" ");
    }

    public void toRight() {
        Log.e(" ");
    }

    public void fastToBottom() {
        Log.e(" ");
    }

    public void transform() {
        Log.e(" ");
    }

}

/**
 *    
 */
public abstract class Command {
    protected TetrisMachine machine;

    public Command(TetrisMachine machine) {
        this.machine = machine;
    }

    /**
     *  
     */
   abstract void execute();
}

public class LeftCommand extends Command {
    public LeftCommand(TetrisMachine machine) {
        super(machine);
    }

    @Override
    public void execute() {
        machine.toLeft();
    }
}

public class RightCommand extends Command {
    public RightCommand(TetrisMachine machine) {
        super(machine);
    }

    @Override
    void execute() {
        machine.toRight();
    }
}

public class FallCommand extends Command {
    public FallCommand(TetrisMachine machine) {
        super(machine);
    }

    @Override
    void execute() {
        machine.fastToBottom();
    }
}

public class TransformCommand extends Command {
    public TransformCommand(TetrisMachine machine) {
        super(machine);
    }

    @Override
    void execute() {
        machine.transform();
    }
}

public class Buttons {
    private LeftCommand leftCommand;
    private RightCommand rightCommand;
    private FallCommand fallCommand;
    private TransformCommand transformCommand;

    public void setLeftCommand(LeftCommand leftCommand) {
        this.leftCommand = leftCommand;
    }

    public void setRightCommand(RightCommand rightCommand) {
        this.rightCommand = rightCommand;
    }

    public void setFallCommand(FallCommand fallCommand) {
        this.fallCommand = fallCommand;
    }

    public void setTransformCommand(TransformCommand transformCommand) {
        this.transformCommand = transformCommand;
    }

    public void toLeft() {
        leftCommand.execute();
    }

    public void toRight() {
        rightCommand.execute();
    }

    public void fall() {
        fallCommand.execute();
    }

    public void transform() {
        transformCommand.execute();
    }
}


public class Main {
    public static void main(String[] args){
        // 
        TetrisMachine machine=new TetrisMachine();
        //4 
        Buttons buttons=new Buttons();
        buttons.setLeftCommand(new LeftCommand(machine));
        buttons.setRightCommand(new RightCommand(machine));
        buttons.setFallCommand(new FallCommand(machine));
        buttons.setTransformCommand(new TransformCommand(machine));
        // 
        buttons.toLeft();
        buttons.toRight();
        buttons.fall();
        buttons.transform();
    }
}


복잡해진 것 같은데 Tetris Machine 대상을 직접 만들면 호출 방법이 되지 않을까요???명령자와 청구자가 있는 이유는 명령자는 개폐원칙을 따르고 청구자는 명령의 기록, 취소 등을 실현하기 위한 것이다.

좋은 웹페이지 즐겨찾기