#1
Permite proporcionar un sustituto o marcador de posición para otro objeto. Un proxy controla el acceso al objeto original, permitiéndote hacer algo antes o después de que la solicitud llegue al objeto original.
#2
Permite la colaboración entre objetos con interfaces incompatibles.
#3
Permite añadir funcionalidades a objetos colocando estos objetos dentro de objetos encapsuladores especiales que contienen estas funcionalidades.
#4
Permite mantener más objetos dentro de la cantidad disponible de RAM compartiendo las partes comunes del estado entre varios objetos en lugar de mantener toda la información en cada objeto.
#5
Proporciona una interfaz simplificada a una biblioteca, un framework o cualquier otro grupo complejo de clases.
#6
Permite dividir una clase grande, o un grupo de clases estrechamente relacionadas, en dos jerarquías separadas (abstracción e implementación) que pueden desarrollarse independientemente la una de la otra.
#7
Permite componer objetos en estructuras de árbol y trabajar con esas estructuras como si fueran objetos individuales.