Proxy Pattern applies when the program needs to know about or to intervene the behavior of accessing objects. There are several detailed scenarios in Proxy Pattern, and we can distinguish those scenarios by their different purposes:
Remote proxy: A proxy with interface to manipulate remote objects, such as data items on a remote server
Virtual proxy: A proxy that manages expensive objects which need to be loaded on demand
Protection proxy: A proxy that controls access to target objects, typically it verifies permissions and validates values
Smart proxy: A proxy that does additional operations when accessing target objects
In the section of Adapter Pattern, we used factory method open
that creates an object asynchronously. As a trade-off, we had to let the client wait before the object gets created.
With Proxy Pattern, we could now open
database on demand and create storage instances synchronously.