java设计模式-用接口和抽象类实现扩展
代码结构
第一步:新建一个接口
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;
import org.springframework.stereotype.Component;
@Component
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;
import org.springframework.stereotype.Service;
@Service
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;
import org.springframework.stereotype.Service;
@Service
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