Mam kilka pytań co do interfejsów. Mam taki programik konsolowy:
public interface ISender
{
string Send();
}
public class Sms : ISender
{
public void Send()
{
Console.WriteLine("send sms");
}
}
public class Email : ISender
{
public void Send()
{
Console.WriteLine("send emial");
}
}
public class Handler
{
public void hadle
{
ISender sender = new Sms();
sender = new Email();
}
}
class Program
{
static void Main(string[] args)
{
Handler handler = new Handler();
handler.handle();
}
}
OUTPUT: send sms send email
Rozumiem po co się używa interfejsów klas abstrakcyjnych, wiem tez co to inversion of control i testy jednostkowe, polimorfizm. Także nie piszę tego bo nie chce mi się poczytać ale po to bo w dalszym ciągu mam z tym problem.
Nie rozumiem w tym przykładzie jaka jest tak naprawdę korzyść z użycia interfejsów.
W przykładzie z interfejsami tworzę dwa obiekty o tej samej nazwie zwracające ten sam interfejs, czyli w sumie jak tworzę nowy obiekt a już istnieje wcześniej obiekt o tej samej nazwie to zastępuje się nowym obiektem
Mogę nie korzystać z interfejsów i zrobić to tak.
public class Handler
{
public void hadle
{
Sms sms = new Sms();
Email email = new Email();
}
}
class Program
{
static void Main(string[] args)
{
Handler handler = new Handler();
handler.handle();
}
}
Poza tym że będę musiał tworzyć kolejne nowe obiekty i łamał zasady pisania oprogramowania nie widzę żadnej korzyści z wykorzystania interfejsów. Czy w tym prostym przykładzie są jakieś głębsze korzyści których nie widzę ?
Interfejsy pozwalają się pozbyć zależności, ale pozbędę się ich wtedy jak użyję np DI. W innym przypadku cały czas będę miał te zależności.
I tutaj chyba klucz moich problemów -> Czy tworzenie nowych obiektów które zwracają interfejs, (tak jak w przykładzie) są cały czas zależnością(czyli w klasie Handler
)? Bo wiem że teraz przez interfejs się komunikują dwie klasy (Handler
i klasy dziedziczące po interfejsie) ale nie widzę korzyści tego..
Prosiłbym was o jakiś prosty przykład który pokazuje że przez to że mam klasy ze sobą ściśle połączone będę miał jakiś problem. A ten problem rozwiąże to że mam interfejsy. Z góry dzięki za pomoc.