O "padrão de método de modelo" de padrões de design escritos para mim

Referência de conceito: https://blog.csdn.net/carson_ho/article/details/54910518
Defina uma estrutura de modelo e retarde o conteúdo específico para subclasses com base na herança

Cenas

  • Os comportamentos públicos nas subclasses devem ser extraídos e concentrados na classe pai pública e os métodos especiais devem ser estendidos conforme necessário para evitar a duplicação de código

vantagem

  • 提高代码复用性 Métodos comuns de subclasse podem ser abstraídos em métodos de classe base
  • 提高了拓展性 As subclasses podem implementar métodos dinamicamente de acordo com suas próprias características
  • 反向控制 Por meio da operação da classe pai para chamar sua subclasse, o controle reverso é realizado de acordo com o "princípio de abertura e fechamento"

Desvantagem

  • Introduzidas classes abstratas, cada implementação diferente requer uma subclasse para ser alcançada, resultando em um aumento no número de classes, aumentando assim a complexidade da implementação do sistema

usar

Enviar solicitação de obtenção / exclusão

1. 创建抽象父类
/**
 * 抽象父类
 *
 * @author dkangel
 */
public abstract class RequestHandler {
    
    
    private static final String PROTOCOL = "https://";
    private static final int SUCCESS = 200;

    /**
     * 生成url
     *
     * @param host 主机名
     * @param port 端口
     * @param path 路径
     * @return url
     */
    public String generateUrl(String host, String port, String path) {
    
    
        StringBuilder url = new StringBuilder(PROTOCOL);
        url.append(host).append(":").append(port).append("/").append(path);

        return url.toString();
    }

    /**
     * 发送请求,由子类实现
     *
     * @param url url
     * @return Response
     */
    public abstract Response sendRequest(String url);

    /**
     * 处理返回结果
     *
     * @param response 返回体
     */
    public void handleResponse(Response response) {
    
    
        if (SUCCESS == response.getHttpCode()) {
    
    
            System.out.println("handle success.");
        }
    }

    /**
     * 发送请求方法
     *
     * @param host 主机
     * @param port 端口
     * @param path path
     */
    public void handleRequest(String host, String port, String path) {
    
    
        String url = generateUrl(host, port, path);
        Response res = sendRequest(url);
        handleResponse(res);
    }
}

2. 实现Get/Delete子类
/**
 * Get请求
 *
 * @author dkangel
 */
public class GetRequestHandler extends RequestHandler {
    
    
    @Override
    public Response sendRequest(String url) {
    
    
        System.out.println("send get request.");
        Response response = new Response();
        response.setHttpCode(200);
        return response;
    }
}
/**
 * Delete请求
 *
 * @author dkangel
 */
public class DeleteRequestHandler extends RequestHandler {
    
    
    @Override
    public Response sendRequest(String url) {
    
    
        System.out.println("send get request.");
        Response response = new Response();
        response.setHttpCode(200);
        return response;
    }
}

3. 使用
/**
 * 模板方法模式使用类
 *
 * @author dkangel
 */
public class Main {
    
    
    public static void main(String[] args) {
    
    
        String host = "localhost";
        String port = "8080";

        String getPath = "/app/all";
        get(host, port, getPath);

        String deletePath = "/app/123";
        delete(host, port, deletePath);
    }

    /**
     * 发送Get请求
     *
     * @param host    主机名
     * @param port    端口
     * @param getPath path
     */
    private static void get(String host, String port, String getPath) {
    
    
        RequestHandler handler = new GetRequestHandler();
        handler.handleRequest(host, port, getPath);
    }

    /**
     * 发送Delete请求
     *
     * @param host       主机名
     * @param port       端口
     * @param deletePath path
     */
    private static void delete(String host, String port, String deletePath) {
    
    
        RequestHandler handler = new DeleteRequestHandler();
        handler.handleRequest(host, port, deletePath);
    }
}

Acho que você gosta

Origin blog.csdn.net/Dkangel/article/details/105806966
Recomendado
Clasificación