Программирование на Java


Применение интерфейсов - часть 2


// росянка расширяет класс растение public class Sundew extends Plant implements InsectConsumer { public void consumeInsect(Insect i) { ... } }

// ласточка расширяет класс птица public class Swallow extends Bird implements InsectConsumer { public void consumeInsect(Insect i) { ... } } // муравьед расширяет класс млекопитающее public class AntEater extends Mammal implements InsectConsumer { public void consumeInsect(Insect i) { ... } }

В результате в классе, моделирующем служащего зоопарка, можно объявить соответствующий метод:

// служащий, отвечающий за кормление, // расширяет класс служащий class FeedWorker extends Worker {

// с помощью этого метода можно накормить // и росянку, и ласточку, и муравьеда public void feedOnInsects(InsectConsumer consumer) { ... consumer.consumeInsect(insect); ... } }

В результате удалось свести работу с одним свойством трех разнородных классов в одно место, сделать код более универсальным. Обратите внимание, что при добавлении еще одного насекомоядного такая модель зоопарка не потребует никаких изменений, чтобы обслуживать новый вид, в отличие от первоначального громоздкого решения. Благодаря введению интерфейса удалось отделить классы, реализующие его (живые организмы) и использующие его (служащий зоопарка). После любых изменений этих классов при условии сохранения интерфейса их взаимодействие не нарушится.

Данный пример иллюстрирует, как интерфейсы предоставляют альтернативный, более строгий и гибкий подход вместо множественного наследования.




- Начало -  - Назад -  - Вперед -



Книжный магазин