The proxy design pattern
In some applications, developers could face the need to provide access control to objects. This could be due to many reasons. Some of them include hiding implementation details, improving interaction with expensive resources, interfacing with remote resources, caching, providing lazy or eager initialization, and so on. The proxy design pattern helps to achieve these.
Note
Its purpose is to provide an interface to something else that then gets served behind the scenes to the user.
The proxy design pattern is another example of a wrapper. It is pretty similar to the decorator design pattern, but feels more basic and limited. The reason for this is that the relationship between the proxy and the wrapped object is established during compile time and decorators could be applied at runtime. In the end, its purpose is different.
Class diagram
For the class diagram, let's imagine that we have an application that visualizes text from files. It might need to visualize the text...