Ciężko jakkolwiek nazwać ten temat, bo nie wiem jak opisać mój problem w kilku słowach.
Otóż piszę managera plików na Androida. Mam klasę Explorer, która stanowi interfejs dla różnych typów eksploratora, np FileExplorer, FTPExplorer, ZipExplorer, itd... Dzięki temu mam ładnie oddzielone poszczególne moduły a GUI nie ma pojęcia na czym operuje, wie tylko że to jakiś eksplorator. Program posiada dwa panele, podobnie jak TotalCommander. Każdy panel to oddzielny obiekt implementujący klasę Explorer. Jako schowek (operacje kopiuj/wklej) służy mi singleton, który przechowuje tablicę Object[] tak, aby każdy typ pliku do niego pasował (File, FTPFile, ZipFile, itd...).
I tu zaczyna się problem:
Wszystko jest fajnie dopóki na obu panelach jest taki sam typ Explorer, np. na obu panelach FileExplorer. W jednym panelu klikam kopiuj, do schowka lecą obiekty File, na drugim panelu wklejam, implementacja wie co zrobić z obiektami File.
Problemem jest sytuacja gdy dwa panele posiadają dwa rózne typy Explorera. Powiedzmy, że na jednym jest FTPExplorer a na drugim FileExplorer. Kilkam kopiuj w FTPExplorer, do schowka lecą obiekty FTPFile a na drugim panelu (FileExplorer) daję wklej, no ale FileExplorer nie wie co to jest FTPFile bo on operuje tylko na File więc operacji wklejenia nie da się wykonać.
Potrzebuję czegoś takiego, aby FileExplorer wykonał operację wklejania w inny sposób niż dla File ( w tym przypadku pobrał plik) a jednocześnie chciałbym uniknąć powiązań między modułami, tzn czegoś w stylu "if isFTPFile", "if isFile" itd... FileExplorer ma być do plików lokalnych, FTPExplorer do ftp i do niczego innego.
Mam nadzieje że jasno to opisałem :)
Moje pytanie: czy ktoś spotkał się już z takim problemem i wie jak go rozwiązać?