Cześć, wiem co to są interfejsy, klasy abstrakcyjne oraz klasy, wiem również na czym polega dziedziczenie. Jednak mam zagwozdkę jak projektować programy tak, aby tworzyć je zgodnie z konwencją o ile takowa istnieje. Co jeżeli zamiast klasy stworzę interfejs i będę implementował metody, a następnie tworzył je w docelowych klasach albo co będzie jak stworzę klasę. Nie chce żeby dochodziło do sytuacji że ktoś mówi że powinienem to zaimplementować w inny sposób. Podam może przykład. Aktualnie uczę się JDBC i jak wiemy aby połączyć się tam z bazą danych należy utworzyć za pomocą klasy Connection obiekt np. connection. Problem polega na tym, że mając kilka klas odpowiadających za logikę JDBC metodę tę trzeba tworzyć w każdej klasie, dlatego postanowiłem przenieść metodę do osobnego tworu aby metoda połączenia była napisana tylko raz, a wszystkie klasy zainteresowane mogłyby z niej korzystać. Jednak problem jest taki że nie rozumiem za bardzo kiedy twory typu klasy abstrakcyjne, interfejsy się wykorzystuje, a w internecie prezentują klasy abstrakcyjne i interfejsy na podstawie pojazdu albo zwierzęcia i psa - nic mi to nie mówi. Patrząc na mój przykład mógłbym:
- Utworzyć klasę z publiczną metodą statyczną getConnection() i wywołać tę metodę w klasach docelowych.
- Utworzyć klasę po której będzie dziedziczyć każda klasa docelowa i wywoływać tę metodę.
- Utworzyć interfejs gdzie utworzę metodę getConnection(), zaimplementuje go do każdej klasy docelowej, a następnie utworzę docelową metodę w każdej z nich.
- Utworzę klasę abstrakcyjną - w zasadzie punkt 1, 2 i 3.
Każda implementacja jaka jest tutaj opisywana powinna zadziałać identycznie, jednak różni się. Pytanie jest, jak powinno się to stosować i kiedy stosujemy klasy abstrakcyjne, interfejsy, a kiedy zwykłe klasy, bo tak na prawdę cały program można stworzyć na zwykłych klasach... Z góry dzięki za odpowiedzi.