So let's try to summarize what we've learned about the proxy Design Patterns so we saw that typically
a proxy has the same interface as the underlying object to make a proxy you simply replicate the existing
interface of an object.
And then of course you change its underlying functionality so you add behind the scenes into those triplicated
members.
You add the new functionality you're kind of redefining what's actually happening behind the scenes
and there is a large variety of proxies out there we've looked at communication proxies are also logging
proxy caching proxies and so on and so forth and all of these proxies have completely different behaviors.
So the goal of the proxies to kind of change the behavior of an object behind the scenes but preserve
the interface that everyone is used to.