Интерфейсите на етикети се използват в Java (Serializable е очевидният пример). C# и дори Java изглежда се отдалечават от това, но в полза на атрибутите, които могат да постигнат същото, но и много повече.
Все още мисля, че има място за тях в други езици, които нямат концепцията за атрибути, която имат .NET и Java.
ETA:
Обикновено бихте използвали това, когато имате интерфейс, който предполага реализация, но не искате класът, който имплементира интерфейса, действително да трябва да предоставя тази реализация.
Някои примери от реалния свят:
Serializable е добър пример - това предполага, че има имплементация (някъде), която може да сериализира данните на обекта, но тъй като е налична обща имплементация за това, няма нужда реално обектът да изпълнява самата тази функционалност.
Друг пример може да бъде система за кеширане на уеб страници. Да кажем, че имате обект "Page" и обект "RequestHandler". RequestHandler приема заявка за страница, намира/създава съответния обект Page, извиква метод Render() на обекта Page и изпраща резултатите до браузъра.
Сега кажете, че искате да приложите кеширане за изобразени страници. Но проблемът е, че някои страници са динамични, така че не могат да бъдат кеширани. Един от начините за прилагане на това би бил да накарате обектите на страница с възможност за кеширане да имплементират интерфейс на ICacheable "tag" (Или обратното, можете да имате интерфейс INotCacheable). След това RequestHandler ще провери дали страницата имплементира ICacheable и ако го направи, ще кешира резултатите след извикване на Render() и ще сервира тези кеширани резултати при последващи заявки за тази страница.
person
Eric Petroelje
schedule
11.06.2009