Инструменты пользователя

Инструменты сайта


pattern_command

Назад

Паттерн Команда инкапсулирует запрос в виде объекта, делая возможной параметризацию клиентских объектов с другими запросами, организацию очереди или регистрацию запросами, а также поддержку отмены операций.

Command
public interface Command
{
    public void execute();
    public void undo();
}
 
 
class LightOnCommand implements Command
{
    Light light;
    public LightOnCommand(Light light)
    {
        this.light = light;
    }
    public void execute()
    {
        light.On();
    }
    public void undo()
    {
        light.Off();
    }
}
 
class LightOffCommand implements Command
{
    Light light;
    public LightOffCommand(Light light)
    {
        this.light = light;
    }
    public void execute()
    {
        light.Off();
    }
    public void undo()
    {
        light.On();
    }
}
 
class GarageOpenCommand implements Command
{
    Garage garage;
    public GarageOpenCommand(Garage garage)
    {
        this.garage = garage;
    }
    public void execute()
    {
        garage.Open();
    }
    public void undo()
    {
        garage.Close();
    }    
}
 
class GarageCloseCommand implements Command
{
    Garage garage;
    public GarageCloseCommand(Garage garage)
    {
        this.garage = garage;
    }
    public void execute()
    {
        garage.Close();
    }
    public void undo()
    {
        garage.Open();
    }      
}
Light
public class Light
{
    public void On()
    {
        System.out.println("Включить свет");
    }
    public void Off()
    {
        System.out.println("Выключить свет");
    }
}
Garage
public class Garage
{
    public void Open()
    {
        System.out.println("Открыть гараж");
    }
    public void Close()
    {
        System.out.println("Закрыть гараж");
    }    
}
Main
public class Main
{
    public static void main(String[] args)
    {
        ArrayList <Command> list = new ArrayList();
 
        list.add(new LightOnCommand(new Light()));
        list.get(list.size()-1).execute();
 
        list.add(new LightOffCommand(new Light()));
        list.get(list.size()-1).execute();
 
        list.add(new GarageOpenCommand(new Garage()));
        list.get(list.size()-1).execute();
        list.get(list.size()-1).undo();/*отмена операций*/
 
        /*Действие назад*/
        list.remove(list.get(list.size()-1));
        list.get(list.size()-1).execute();
 
        /*
            Включить свет
            Выключить свет
            Открыть гараж
            Закрыть гараж
            Открыть гараж        
        */
    }
}