- 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.