Proxy
Much like the Decorator design pattern, the Proxy design pattern extends an object's functionality. However, unlike a decorator, which always does what it's told, having a proxy may mean that when asked to do something, the object does something totally different.
When we discussed Creational Patterns in Chapter 2, Working with Creational Patterns, we already touched on the idea of expensive objects. For example, an object that accesses network resources or takes a lot of time to create.
We at the Funny Cat App provide our users with funny cat images on a daily basis. On our homepage and mobile application, each user sees a lot of pictures of funny cats. When they click or touch any of those images, it expands to its full-screen glory.
Fetching cat images over the network is very expensive, and it consumes a lot of memory, especially if those are images of cats that tend to indulge in a second dessert after dinner. What we want to do is fetch the full-sized...