Wzorce projektowe: proxy vs singleton

0

Czytam, że proxy może być używane, do kontroli tworzenia klasy - np. żeby była tylko 1 instancja. A to nie przypadkiem singleton jest od tworzenia 1 instacji?

Popatrzcie na ten przykład proxy:
http://www.avajava.com/tutorials/lessons/proxy-pattern.html

czy to nie powinno być zrobione singletonem?

Poza tym klasa która jest opakowana w proxy jest publiczna i jej konstruktor też to po cholerę to proxy jak se można i tak utworzyć ten opakowany obiekt i robić z nim co się żywnie podoba...

1
  • singleton wymusza, że tylko jeden obiekt zostanie utworzony
  • proxy jest zamiennikiem obiektu, pozwala na używanie obiektów, niezależnie od tego, gdzie się znajdują i czy w ogóle istnieją

np. można stworzyć proxy, które będzie pozwalało na operację na obiekcie po drugiej stronie internetu, w taki sposób w jaki byś operował na obiekcie w pamięci RAM (a potem za ścianami obiekt proxy, mógłby wykonać w odpowiednim momencie request do serwera).

czy to nie powinno być zrobione singletonem?

zwróć uwagę na to, że w programowaniu wiele rzeczy się zahacza. Wzorce projektowe gdzieś na podstawowym poziomie to nie jedna idea, tylko kilka różnych (np. w singletonie mogłyby się zawierać idee: zmiennej globalnej, pojedynczości, tworzenia, leniwości itp.).

Każdy przykład też dodaje jakieś dodatkowe idee, które wynikają z przypadku użycia. W tym przykładzie było pokazane leniwe tworzenie obiektu w obiekcie Proxy, dlatego to skojarzyłeś z singletonem, w którym też często występuje leniwe tworzenie - co nie znaczy, że każdy przypadek użycia będzie taki sam.

Lepiej jest nie myśleć (tylko) w kategoriach wzorców, ale patrzeć co one sobą reprezentują (jakie idee). Szczególnie, że i tak w praktyce najefektywniejsze nie są czyste wzorce, tylko wzorce dostosowane do potrzeb projektu, czasami pomieszanie kilku wzorców itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1