Jakie wzorce projektowe GOF są już zaimplementowane jako pierwszorzędne funkcje językowe w języku C #?


10

(To pytanie zostało zamknięte w przypadku przepełnienia stosu, ponieważ jest „zbyt szerokie” i „nie jest prawdziwym pytaniem”, więc może jest bardziej odpowiednie tutaj?)

Zainspirowany tym pytaniem . Wiemy, że wydarzenia są implementacją wzorca Observer na poziomie językowym. Czy istnieją inne wzorce projektowe zaimplementowane jako funkcje językowe w języku C #? Chcę zachować to pytanie specyficzne dla języka C #, ponieważ istnieje wiele wzorców projektowych zaimplementowanych w innych językach, i chcę skupić się na tym.

Nie szukam implementacji wzorców w BCL (takich jak dekorator w wielu klasach WCF lub metoda fabryczna w WebClient), ale wzorce na poziomie języka .

Jak dotąd znam observer ( event) i iterator ( foreachw połączeniu z wieloma klasami i interfejsami BCL). Prawdopodobnie są inne oczywiste, za którymi tęsknię.

Odpowiedzi:


1

Delegaci są de facto wzorcami strategii


zabawne, zaledwie wczoraj kolega powiedział, że delegaci są implementacją wzorca poleceń. Zależy od tego, jak na to patrzysz (polecenie afaik powinno również zawierać argumenty, ale w przypadku metody bez argumentów ..)
stijn

1
Nie powiedziałbym, że delegaci są implementacją wzorców poleceń, przynajmniej nie widzę, jak można zaimplementować takie rzeczy jak cofanie / ponawianie przy użyciu tylko delegatów. Mogą być częścią obiektu dowodzenia, ale to inna sprawa
Homde

0

Metody przedłużania są abstrakcją wzoru dekoratora.


Nie całkiem. Decorator pozwala nam komponować obiekty w czasie wykonywania w celu dodawania danych i zachowania.
Martin Doms,

1
To prawda - więc nie są tak przydatne, jak prawdziwe wzory dekoratorów. Czy lepiej byłoby powiedzieć, że wiele problemów rozwiązanych metodami rozszerzenia rozwiązuje się za pomocą wzorów dekoratorów w innych językach?
vstrien
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.