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



posted @ 2021-08-22 16:04  银河系的极光  阅读(345)  评论(0编辑  收藏  举报