Интерфейсы тегов используются в Java (очевидным примером является Serializable). C# и даже Java, кажется, отходят от этого, хотя и в пользу атрибутов, которые могут выполнять то же самое, но делать гораздо больше.
Я по-прежнему думаю, что для них найдется место в других языках, в которых нет той концепции атрибутов, которая есть в .NET и Java.
Расчетное время прибытия:
Обычно вы используете это, когда у вас есть интерфейс, который подразумевает реализацию, но вы не хотите, чтобы класс, который реализует интерфейс, фактически должен был предоставить эту реализацию.
Несколько реальных примеров:
Хорошим примером является Serializable — он подразумевает, что существует реализация (где-то), которая может сериализовать данные объекта, но, поскольку для этого доступна общая реализация, нет необходимости в том, чтобы объект сам реализовывал эту функциональность.
Другим примером может быть система кэширования веб-страниц. Скажем, у вас есть объект «Страница» и объект «RequestHandler». RequestHandler принимает запрос на страницу, находит/создает соответствующий объект Page, вызывает метод Render() для объекта Page и отправляет результаты в браузер.
Теперь предположим, что вы хотите реализовать кэширование отображаемых страниц. Но загвоздка в том, что некоторые страницы являются динамическими, поэтому их нельзя кэшировать. Одним из способов реализации этого может быть реализация кешируемыми объектами Page интерфейса «тегов» ICacheable (или наоборот, у вас может быть интерфейс INotCacheable). Затем RequestHandler проверит, реализована ли страница ICacheable, и если это так, он будет кэшировать результаты после вызова Render() и обслуживать эти кэшированные результаты при последующих запросах для этой страницы.
person
Eric Petroelje
schedule
11.06.2009