Proxy Pattern
For the purposes of software design, the Proxy Pattern allows for better memory management where an object or class is expensive to duplicate.
Situations where a memory-intensive object must exist with multiple copies can be managed with a Proxy Pattern which would create only one instance of an object and multiple proxy objects that reference it. All events and actions are submitted to one of the multiple proxy objects which then forwards it to the single instance object.
Types of Proxy Pattern:
Remote Proxy     Where the proxy object references the single instance which could be on the current or a remote machine.
Virtual Proxy     Where the single instance object is created as needed along with at least one proxy object and removed when there are no more proxy objects referencing it anymore.
Protection Proxy   Where the proxy objects could have varying levels of security access to the underlying single instance object.