java_command_매크로 명령

5827 단어 Designpattern
introduction:
이렇게 하는 목적은'하드 인코딩'을 줄이고 명령의 조합을 동태적으로 결정하여 사용에 더욱 유연하게 할 수 있다. 일반적으로 매크로 명령의 방법은 더욱 우아하고 비교적 적은 새로운 코드가 필요하다.
demo:
description: 무도회 장면을 모의할 때 조명과 음악이 필요합니다.
Light.java
public class Light {
    private String name;
    
    public Light(String name){
        this.name = name;
    }
    
    public void on(){
        System.out.println(name+" on");
    }
    
    public void off(){
        System.out.println(name+" off");
    }
    
}

Player.java
public class Player {
    private String name;
    
    public Player(String name){
        this.name = name;
    }
    
    public void off(){
        System.out.println(name+" off");
    }
    
    public void on(){
        System.out.println(name+" on");
    }
    
    public void volumn(int num){
        System.out.println(name+" : "+num);
    }
    
    public void cd(){
        System.out.println(name+" cd");
    }
    
    public void dvd(){
        System.out.println(name+" dvd");
    }
}

Command.java
public interface Command {  
    void execute();  
    void undo();  
} 

LightOffCommand.java
public interface Command {  
    void execute();  
    void undo();  
} 

LightOnCommand.java
public class LightOnCommand implements Command{

    private Light light;
    public LightOnCommand(Light light){
        this.light = light;
    }
    @Override
    public void execute() {
        light.on();
    }

    @Override
    public void undo() {
        light.off();
    }

}

NoCommand.java
public class NoCommand implements Command{  
    
    @Override  
    public void execute() {  
        // TODO Auto-generated method stub  
          
    }  
  
    @Override  
    public void undo() {  
        // TODO Auto-generated method stub  
          
    }  
  
}

PlayeroffCommand.java
public class PlayerOffCommand implements Command{
    private Player player;
    
    public PlayerOffCommand(Player player){
        this.player = player;
    }

    @Override
    public void execute() {
        player.off();
    }

    @Override
    public void undo() {
        player.on();
        player.cd();
        player.volumn(11);
    }
    
    
}

PlayerOnCommand.java
public class PlayerOnCommand implements Command{
    private Player player;
    
    public PlayerOnCommand(Player player){
        this.player = player;
    }

    @Override
    public void execute() {
        player.on();
        player.cd();
        player.volumn(11);
    }

    @Override
    public void undo() {
        player.off();
    }
    
    
}

MacroOffCommand.java
public class MacroOffCommand implements Command{

    private Command[] commands;
    
    public MacroOffCommand(Command[] commands){
        this.commands = commands;
    }
    @Override
    public void execute() {
        for(int i=0;i

MacroOnCommand.java
public class MacroOnCommand implements Command{

    private Command[] commands;
    
    public MacroOnCommand(Command[] commands){
        this.commands = commands;
    }
    @Override
    public void execute() {
        for(int i=0;i

RemoteControl.java
public class RemoteControl {
    
    private Command[] onCommands;
    private Command[] offCommands;
    private Command undoCommand;
    
    public RemoteControl(){
        Command noCommand = new NoCommand();
        
        onCommands = new Command[1];
        offCommands = new Command[1];
        
        this.undoCommand = noCommand;
        for(int i=0;i

ControllerLoader.java
public class ControllerLoader {
    public static void main(String[] args) {
        Light light = new Light("party light");
        Player player = new Player("party player");
        
        Command partyLightOn = new LightOnCommand(light);
        Command partyLightOff = new LightOffCommand(light);
        Command partyPlayerOn = new PlayerOnCommand(player);
        Command partyPlayerOff = new PlayerOffCommand(player);
        
        Command[] onCommands = {partyLightOn,partyPlayerOn};
        Command[] offCommands = {partyLightOff,partyPlayerOff};
        
        Command macroOn = new MacroOnCommand(onCommands);
        Command macroOff = new MacroOffCommand(offCommands);
        
        RemoteControl remoteControl = new RemoteControl();
        
        remoteControl.setCommand(0, macroOn, macroOff);
        
        System.out.println(remoteControl);
        
        remoteControl.onButtonPressed(0);
        remoteControl.offButtonPressed(0);
        remoteControl.undoButtonPressed();
    }
}

실행 결과:
--- command begin ---  [0]MacroOnCommand , MacroOffCommand party light on party player on party player cd party player : 11 party light off party player off party light on party player on party player cd party player : 11

좋은 웹페이지 즐겨찾기