definición:
Utilice objetos proxy para completar las solicitudes de los usuarios y bloquear el acceso de los usuarios a objetos reales
Escenarios de aplicación:
- Por razones de seguridad, es necesario impedir que el cliente acceda directamente al objeto real.
- Al realizar llamadas remotas, debe usar clases de proxy para manejar los detalles técnicos de las llamadas a métodos remotos
- Para mejorar el rendimiento del sistema, encapsule objetos reales para lograr el propósito de la carga diferida
estructura:
Roles | efecto |
---|---|
Clase de interfaz | Definir los métodos externos públicos de la clase de agente y la clase de negocio real. |
Negocio real | Clases que realmente implementan la lógica empresarial |
Clase de proxy | Se utiliza para enviar por proxy y empaquetar [clase empresarial real] |
Cliente | Utilice la clase de agente para completar los negocios |
Caso: (carga diferida)
Clase de interfaz:
public interface QueryInterface {
void outStr();
}
Clase de negocios real:
public class QueryImp implements QueryInterface{
public QueryImp() {
try{
//重量级对象
Thread.sleep(3000);
System.out.println("处理业务逻辑");
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void outStr() {
System.out.println("输出方法:aaa");
}
}
Clase de agente:
public class QueryImpProxy implements QueryInterface {
//轻量级对象
private static class GetQueryImp{
//在真正需要的时候才创建真实对象,因为创建真实对象的时候会有业务逻辑,耗时较长
private static QueryImp queryImp=new QueryImp();
};
@Override
public void outStr() {
GetQueryImp.queryImp.outStr();
}
}
Cliente:
public class TestApp {
public static void main(String[] args){
System.out.println("开始(使用代理):"+ DateUtils.getCurrDateTime());
QueryInterface inter=new QueryImpProxy();//使用代理
// inter.outStr();//真正使用的时候才创建真实对象
System.out.println("结束(使用代理):"+ DateUtils.getCurrDateTime());
System.out.println("开始(未使用代理):"+ DateUtils.getCurrDateTime());
QueryInterface inter1=new QueryImp();//未使用代理,在此直接创建真实对象
// inter1.outStr();
System.out.println("结束(未使用代理):"+ DateUtils.getCurrDateTime());
}
}
Resultado de la ejecución del cliente:
para resumir:
Cuando se usa el modo proxy para implementar la carga diferida, puede aumentar efectivamente la velocidad del sistema y mejorar la experiencia del usuario