Вход/Регистрация
Философия Java3
вернуться

Эккель Брюс

Шрифт:

Рассмотрим конкретную реализацию системы управления, разработанную для управления функциями оранжереи16. Все события — включение света, воды и нагревателей, звонок и перезапуск системы — абсолютно разнородны. Однако система управления разработана так, что различия в коде легко изолируются. Внутренние классы помогают унаследовать несколько производных версий одного базового класса Event в пределах одного класса. Для каждого типа события от Event наследуется новый внутренний класс, и в его реализации action записывается управляющий код.

Как это обычно бывает при использовании каркасов приложений, класс GreenhouseControls наследует от класса Controller:

//: innerclasses/GreenhouseControls.java // Пример конкретного приложения на основе системы // управления, все находится в одном классе. Внутренние // классы дают возможность инкапсулировать различную // функциональность для каждого отдельного события, import innerclasses.control 1er.*,

public class GreenhouseControls extends Controller {

private boolean light = false,

public class LightOn extends Event {

public LightOndong delayTime) { super (delayTime). } public void actionO {

// Сюда помещается аппаратный вызов, выполняющий // физическое включение света, light = true;

}

public String toStringO { return "Свет включен"; }

}

public class LightOff extends Event {

public LightOffdong delayTime) { super(delayTime); } public void actionO {

// Сюда помещается аппаратный вызов, выполняющий // физическое выключение света light = false;

}

public String toStringO { return "Свет выключен", }

}

private boolean water = false;

public class WaterOn extends Event {

public WaterOn(long delayTime) { super(delayTime), } public void actionO {

// Здесь размещается код включения '// системы полива, water = true;

}

public String toStringO {

return "Полив включен";

}

}

public class WaterOff extends Event {

public WaterOffdong delayTime) { super(delayTime); } public void actionO {

// Здесь размещается код выключения // системы полива water = false;

}

public String toStringO {

return "Полив отключен";

}

}

private String thermostat = "День";

public class Thermostaticght extends Event {

public Thermostaticght(long delayTime) { super(delayTime);

}

public void actionO {

// Здесь размещается код управления оборудованием thermostat = "Ночь";

public String toStringO {

return "Термостат использует ночной режим";

}

}

public class ThermostatDay extends Event {

public ThermostatDay(long delayTime) { super(delayTime);

}

public void actionO {

// Здесь размещается код управления оборудованием thermostat = "День";

}

public String toStringO {

return "Термостат использует дневной режим";

}

}

// Пример метода actionO, вставляющего

// самого себя в список событий.

public class Bell extends Event {

public Bell(long delayTime) { super(delayTime); } public void actionO {

addEvent(new Bell(delayTime));

}

public String toStringO { return "Бам!"; }

}

public class Restart extends Event { private Event[] eventList;

public Restartdong delayTime. Event[] eventList) { super(delayTime); this.eventList = eventList; for(Event e : eventList) addEvent(e);

}

public void actionO {

for(Event e : eventList) {

e. start О; // Перезапуск каждый раз addEvent(e);

}

startO; // Возвращаем это событие Event addEvent(this);

}

public String toStringO {

return "Перезапуск системы";

}

}

public static class Terminate extends Event {

public Terminatedong delayTime) { super(delayTime); }

public void actionO { System.exit(0); }

public String toStringO { return "Отключение"; }

}

} ///;-

Заметьте, что поля light, thermostat и ring принадлежат внешнему классу GreenhouseControls, и все же внутренние классы имеют возможность обращаться к ним, не используя особой записи и не запрашивая особых разрешений. Большинство методов action требует управления оборудованием оранжереи, что, скорее всего, привлечет в программу сторонние низкоуровневые вызовы.

  • Читать дальше
  • 1
  • ...
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: