Proxy estático JavaSE

Clasificación de patrón de proxy :

  • Proxy estático
  • Proxy dinámico

1.1 Proxy estático

Análisis del rol del agente estático

  • Rol abstracto: generalmente se implementa mediante interfaces o clases abstractas.
  • Rol real: el rol que se está representando.
  • Rol de actuación: Actuando por el rol real; después de actuar por el rol real, generalmente se realizan algunas operaciones subsidiarias.
  • Cliente: utilice el rol de agente para realizar algunas operaciones.

1.2 Ejemplo de código

Interfaz de alquiler (función abstracta)

package cn.guardwhy.domain;
// 抽象角色:租房
public interface Rent {
    
    
    public void rent();
}

Propietario

package cn.guardwhy.domain;
// 真实角色: 房东,要出租房子
public class Landlord implements Rent {
    
    
    @Override
    public void rent() {
    
    
        System.out.println("房屋出租!!!");
    }
}

Proxy es el rol de proxy

package cn.guardwhy.proxy;

import cn.guardwhy.domain.Landlord;
import cn.guardwhy.domain.Rent;

public class Proxy implements Rent {
    
    
    private Landlord landlord;

    public Proxy() {
    
    

    }

    public Proxy(Landlord landlord) {
    
    
        this.landlord = landlord;
    }

    @Override
    // 租房
    public void rent() {
    
    
        // 调用方法
        seeHouse();
        landlord.rent();
        agreement();
        fare();
    }

    // 看房
    public void seeHouse(){
    
    
        System.out.println("带房客看房!!!");
    }
    // 合同
    public void agreement(){
    
    
        System.out.println("签租赁合同...");
    }
    // 收中介费
    public void fare(){
    
    
        System.out.println("收中介费");
    }
}

Cliente (inquilino)

package cn.guardwhy.client;

import cn.guardwhy.domain.Landlord;
import cn.guardwhy.proxy.Proxy;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        // 1.房东租房子
        Landlord landlord = new Landlord();
        // 2.代理,中介帮房东租房子
        Proxy proxy = new Proxy(landlord);
        // 3.不需要直接面对房东,直接找中介租房即可
        proxy.rent();
    }
}

Resultados de la

Resultado de analisis

En este proceso, estás en contacto directo con el intermediario, al igual que en la vida real, no puedes ver al arrendador, pero aun así alquilas la casa del arrendador a través de una agencia, que es el llamado modelo de agencia.

1.3 Características del proxy estático

ventaja:

  • Puede hacer que nuestro rol real sea más puro. Ya no prestemos atención a algunas cosas públicas.
  • El negocio público lo completa el agente, se realiza la división del trabajo.
  • A medida que los servicios públicos se expanden, se vuelven más centralizados y convenientes.

Desventajas:

Hay más clases y más clases de agentes, y la carga de trabajo aumenta. Se reduce la eficiencia del desarrollo.

2.1 Re-comprensión del proxy estático

1. Papel abstracto

package cn.guardwhy.domain;
// 抽象角色,增删改查业务
public interface UserService {
    
    
    void add();
    void delete();
    void update();
    void query();
}

2. Objetos reales para completar la operación de agregar, eliminar, modificar

package cn.guardwhy.domain;
// 真实对象,完成增删改查的操作
public class UserServiceImpl implements UserService{
    
    
    @Override
    public void add() {
    
    
        System.out.println("增加了一个用户");
    }

    @Override
    public void delete() {
    
    
        System.out.println("删除了一个用户");
    }

    @Override
    public void update() {
    
    
        System.out.println("更新了一个用户");
    }

    @Override
    public void query() {
    
    
        System.out.println("查询一个用户");
    }
}

3. Configure una clase de proxy para procesar registros

package cn.guardwhy.proxy;

import cn.guardwhy.domain.UserService;
import cn.guardwhy.domain.UserServiceImpl;

public class UserServiceProxy implements UserService {
    
    
    private UserServiceImpl userService;

    public UserServiceImpl getUserService() {
    
    
        return userService;
    }

    public void setUserService(UserServiceImpl userService) {
    
    
        this.userService = userService;
    }

    @Override
    public void add() {
    
    
        message("添加方法");
        userService.add();
    }

    @Override
    public void delete() {
    
    
        message("删除方法");
        userService.delete();
    }

    @Override
    public void update() {
    
    
        message("更新方法");
        userService.update();
    }

    @Override
    public void query() {
    
    
        message("查询方法");
        userService.query();
    }

    public void message(String msg){
    
    
        System.out.println("执行了" + msg + "方法!!");
    }
}

4. Código de prueba

package cn.guardwhy.client;

import cn.guardwhy.domain.UserServiceImpl;
import cn.guardwhy.proxy.UserServiceProxy;

public class Client2 {
    
    
    public static void main(String[] args) {
    
    
        // 1.真实业务
        UserServiceImpl userService = new UserServiceImpl();
        // 2.代理类
        UserServiceProxy proxy = new UserServiceProxy();
        // 3.使用代理类实现日志功能
        proxy.setUserService(userService);
        // 调用方法
        proxy.add();
    }
}

Supongo que te gusta

Origin blog.csdn.net/hxy1625309592/article/details/115031693
Recomendado
Clasificación