The Proxy design pattern provides a surrogate or placeholder for another object to control access to it.
In Java, this pattern is used to provide a layer of indirection to an object, so that clients interact with the proxy instead of the real object. This can be used to implement access control, logging, or remote communication, among other things.