Я создаю сетевую библиотеку Java и приложение, которое ее использует.Библиотека состоит из:
- Интерфейс PacketSocket, который имеет методы для отправки и получения пакетов байтов.
- Две его реализации, одна по TCP и одна по UDP.
- Класс ObjectConnection, который построен поверх PacketSocket и обрабатывает сериализацию объектов в байтовые пакеты.
Приложение использует RequestConnection поверх UDPPacketSocket.Реализация UDPPacketSocket уникальна тем, что поддерживает указание для каждого пакета, должна ли быть гарантирована доставка.Я хотел бы иметь возможность использовать из приложения, но нет никакого пути через интерфейсы ObjectConnection и PacketSocket.
Конечно, я мог бы добавить логический гарантированный параметр к применимым методам в этих интерфейсах, но затемВ конце концов, я (когда будет больше реализаций PacketSocket) пришлось бы добавить гораздо больше параметров, которые относятся только к определенным реализациям и игнорируются другими.
Вместо этого я решил, что могу сделать это со статическим потокомлокальное свойство UDPPacketSocket, например, так:
class Application {
public void sendStuff() {
// is stored in a ThreadLocal, so this code is still thread-safe
UDPPacketSocket.setGuaranteed(true);
try {
myObjCon.send(...);
} finally {
// ... restore old value of guaranteed
}
}
}
Что вы думаете о таком подходе?