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);
}
}