Иллюстрированный самоучитель по Java



Интерфейсы - часть 5


Система управления светофором

interface Lights{

  int RED    = 0;

  int YELLOW = 1;

  int GREEN  = 2;

  int ERROR  = -1; 

class Timer implements Lights{

  private int delay;

  private static int light = RED;

  Timer(int sec)(delay = 1000 * sec;}

  public int shift(){

    int count = (light++) % 3; 

    try{

      switch(count){

        case RED: Thread.sleep(delay); break; 

        case YELLOW: Thread.sleep(delay/3); break; 

        case GREEN: Thread.sleep(delay/2); break; 

      }

    }catch(Exception e){return ERROR;} 

    return count;

  }

}

class TrafficRegulator{

  private static Timer t = new Timer(1);

  public static void main(String[] args){

    for (int k = -0; k < 10; k++)

      switch(t.shift()){

      case Lights.RED:    System.out.println("Stop!"); break; 

      case Lights.YELLOW: System.out.println("Wait!"); break; 

      case Lights.GREEN:  System.out.println("Go!");   break; 

      case Lights.ERROR:  System.err.println("Time Error"); break; 

      default: System.err.println("Unknown light."); return;

    }

  }

}

Здесь, в интерфейсе

Lights

, определены константы, общие для всего проекта.

Класс

Timer

реализует этот интерфейс и использует константы напрямую как свои собственные. Метод

shift

о этого класса подает сигналы переключения светофору с разной задержкой в зависимости от цвета. Задержку осуществляет метод

sleep()

класса

Thread

из стандартной библиотеки, которому передается время задержки в миллисекундах. Этот метод нуждается в обработке исключений

try{} catch() {}

, о которой мы будем говорить в

главе 16.

Класс

TrafficReguiator

не реализует интерфейс

Lights

и пользуется полными именами

Lights.RED

и т.д. Это возможно потому, что константы

RED, YELLOW

и

GREEN

по умолчанию являются статическими.

Теперь нам известны все средства языка Java, позволяющие проектировать решение поставленной задачи. Заканчивая разговор о проектировании, нельзя не упомянуть о постоянно пополняемой коллекции образцов проектирования (design patterns).




Содержание  Назад  Вперед