java設計模式-用介面和抽象類實現擴充套件
阿新 • • 發佈:2021-08-22
程式碼結構
第一步:新建一個介面
package com.chilly.handler;
import java.util.HashMap;
import java.util.Map;
/**
* 業務處理公共的業務介面和業務分類
*/
public interface InterfaceHandler {
public static final Map<String,InterfaceHandler> handlerMap = new HashMap<>();
public abstract String getCode();
public abstract void setHandler();
public abstract InterfaceHandler getHandler(String code);
public abstract void handler(Object params);
}
第二步:建立一個抽象類實現預設處理業務
package com.chilly.handler;
import sun.awt.SunHints;
import javax.annotation.PostConstruct;
public class AbstractHanlderService implements InterfaceHandler{
@Override
public String getCode() {
return "default";
}
/**
* PostConstruct註解,標識tomcat啟動完成時執行該方法
* @return
*/
@PostConstruct
@Override
public void setHandler() {
handlerMap.put(getCode(),this);
}
@Override
public InterfaceHandler getHandler(String code) {
return handlerMap.get(code);
}
@Override
public void handler(Object params) {
System.out.println("預設處理業務");
}
}
第三步:編寫其它業務處理邏輯
處理邏輯1
package com.chilly.handler.service;
import com.chilly.handler.AbstractHanlderService;
public class DeleteHandlerServiceImpl extends AbstractHanlderService {
public String getCode() {
return "delete";
}
@Override
public void handler(Object params) {
System.out.println("delete處理業務");
}
}
處理邏輯2
package com.chilly.handler.service;
import com.chilly.handler.AbstractHanlderService;
public class UpdateHandlerServiceImpl extends AbstractHanlderService {
public String getCode() {
return "update";
}
@Override
public void handler(Object params) {
System.out.println("update處理業務");
}
}
第四步:介面呼叫處理
package com.chilly.controller;
import com.chilly.handler.InterfaceHandler;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class HandlerController {
@PostMapping("/handler")
public String test(String code, HttpServletRequest request) {
InterfaceHandler handler = InterfaceHandler.handlerMap.get(code);
handler.handler(request);
return "handler ok";
}
}
用到知識點:@PostConstruct