Показать сообщение отдельно
Старый 06.06.2011, 21:31
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 17  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Это скорее не для того, чтобы гарантировать наличие методов, а для того, чтобы абсолютно разные классы принадлежали к одному типу данных.

Допустим диспатчат 2 разных класса одно событие и при этом оба класса применяют общий интерфейс (допустим ISomeInterface), но есть еще и другие классы, которые тоже диспатчат это событие. Нам же нужно делать что-то только с теми классами, которые применяют этот интерфейс.

Для большей наглядности, допустим есть игра, в которой есть различные виды техники, которую нужно уничтожать.
Все виды транспорта будут, естественно, принадлежать к разным классам (Car, Tank, Aaa и т.д.), но есть у них и одно общее, они все должны взрываться.
Для этого создаем интерфейс, например IBlowable, с методом blow();
И имплементим его во всех классах техники.
Теперь, при попадании бомбы в транспортное средство, мы можем проверить в обработчике события так:
Код AS3:
if (e.target is IBlowable) {
      e.target.blow();
}
В этом случае нам не нужно будет проверять принадлежит ли цель к каждому конкретному виду техники, например так:
Код AS3:
if (e.target is Car || e.target is Tank || e.target is Helicopter) {
      e.target.blow();
}
Кто-то возможно скажет: "но ведь можно же, например, првоерить e.target is DisplayObject"
И результат будет true. Но DisplayObject не имеет метода blow();


Вот, как-то так. Надеюсь не слишком стремное пояснение


Последний раз редактировалось goodguy; 06.06.2011 в 21:34.