Он имеет два основных преимущества:
- Во время кодирования можно сделать только для чтения класс коллекции, не делая подкласс, вы можете использовать общий только для чтения обертку на каждом типе коллекции (повторного использования)
- Во время выполнения вы можете создать только для чтения вида существующей коллекции без копирования всей коллекции для реализации только для чтения (обычно дорого)
Последнее часто бывает полезно, если вы хотите для предотвращения использования пользователями класса одиозы собственной собственной коллекции.
В настоящее время считается хорошим дизайном в пользу composition over inheritance, который идеально подходит для этого рисунка.
Пример 1:
class myComplicatedCollection<T> implements Collection<T> {
// Code goes here
// O no, I still have to deal with the read-only use-case.
// Instead of duplicating almost all of my code or using inheritance I'll use this handy-dandy wrapper
public Collection<T> readonlyVersion() {
return Collections.unmodifiableCollection(this);
}
}
Пример 2:
class myClass {
private Collection<T> theData;
// Users need to access the data,
// but we don't want them modifying the private data of this class
public Collection<T> getTheData() {
return Collections.unmodifiableCollection(theData);
}
}
@Dukeling ти для улучшения ми текста. – ZaoTaoBao