Patrón de diseño de proxy estático

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:

  1. Por razones de seguridad, es necesario impedir que el cliente acceda directamente al objeto real.
  2. Al realizar llamadas remotas, debe usar clases de proxy para manejar los detalles técnicos de las llamadas a métodos remotos
  3. 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:

Inserte la descripción de la imagen aquí

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

Supongo que te gusta

Origin blog.csdn.net/qq_28500837/article/details/104946441
Recomendado
Clasificación