2010-06-28 3 views

ответ

1

Для событий: поскольку нормальная ситуация заключается в том, что у нас есть собственный класс реализации, и он вполне может прослушивать несколько разных событий; мы не можем расширять два разных абстрактных класса.

Скаффман уже объяснил одну проблему с использованием абстрактных классов для RMI. Я бы сделал еще один шаг, абстрактный класс - это совершенно неверное понятие для этой цели. Поставщик услуг должен предоставить своим клиентам информацию о том, как вызвать услугу. Интерфейс - это именно то, что нам нужно для этого - он сообщает клиенту , что можно сделать, и ничего о , как все сделано. Когда мы приводим абстрактный класс, мы включаем (частичную) информацию о реализации. Клиенту не нужно это видеть, и в RMI-конфликте возможно даже не скомпилировать его - абстрактный класс на сервере может ссылаться на классы, которые клиент даже не имеет. Конечно, вы можете обрезать все вещи, которые не нужны клиенту, вся реализация и т. Д., И вот! Вы вернулись с информацией, необходимой в интерфейсе.

Так моя практика:

  1. Определите свои интерфейсы, мой контракт с внешним миром.

  2. Если у меня может быть несколько реализаций этого Интерфейса, и особенно если я хочу помочь разработчику, определите абстрактный класс, который реализует интерфейс. Включить общий код реализации в этом абстрактном классе, и оставить некоторые методы абстрактных для реализаторов на самом деле заполнить

Или поставить его просто:. Интерфейс для клиентов, абстрактные классы для реализаторов, и вы можете хорошо выбрать использовать оба. И да, это подразумевает некоторое дублирование, и именно поэтому у нас есть хорошие IDE.

+0

.. Что насчет RMI? – JavaUser

+0

@JavaUser - расширен, чтобы покрыть это. Скажите, если вам это нравится. – djna

2

Поскольку RMI должен генерировать классы заглушки и скелета во время выполнения, которые реализуют эти интерфейсы, используя логику генерации прокси-сервера JRE. Это не работает с абстрактными классами, поэтому все операции RMI должны быть определены как интерфейсы.

+1

Опоры только. Скелеты 12 лет устарели. – EJP

Смежные вопросы