创建枚举类,一共几种工厂(按照统一规范分别产出不同的产品)
package com.demo.pointEnum;
public enum PointTypeEnum {
CameraPointService("1", .CameraPointService.class),
RobotPointService("2", RobotPointService.class),
UAVPointService("3", UAVPointService.class),
VoicePointService("4", VoicePointService.class),
OnlinePointService("5", OnlinePointService.class),
;
public String analysisType;
public Class T;
PointTypeEnum(String s, Class T) {
this.analysisType = s;
this.T = T;
}
public static Class getClassByEventType(String eventType){
for(PointTypeEnum e: PointTypeEnum.values()){
if(e.analysisType.equals(eventType)){
return e.T;
}
}
return null;
}
}
创建生产规范接口
import com.demo.PointTypeEnum;
import java.util.HashMap;
import java.util.Map;
public interface PointService<T extends PointTypeEnum> {
public static Map<String,Long> idMap = new HashMap<>();//统一有的属性等
String doSomething();//统一的生产规范
}
工厂1实现统一的生产规范生产产品A(实现规范接口)
import com.demo.PointTypeEnum;
import com.demo.PointService;
import org.springframework.stereotype.Service;
@Service
public class CameraPointService implements PointService<PointTypeEnum> {
@Override
public String doSomething() {
//针对高清点的处理
//生产A
return null;
}
}
工厂2实现统一的生产规范生产产品B(实现规范接口)
import com.demo.PointTypeEnum;
import com.demoe.PointService;
import org.springframework.stereotype.Service;
@Service
public class RobotPointService implements PointService<PointTypeEnum> {
@Override
public String doSomething() {
//生产B
return null;
}
}
建造不同的工厂
import com.demo.PointService;
import com.demo.PointTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class PointFactory {
@Autowired
private ApplicationContext applicationContext;
public PointService getInstance(String type) {
return (PointService) applicationContext.getAutowireCapableBeanFactory().createBean(PointTypeEnum.getClassByEventType(type));
}
}
在代码逻辑中
PointFactory factory = new PointFactory();
PointService cameraPoint = factory.getInstance("1");
//调用工厂1生产A
cameraPoint.doSomething();
PointService robotPoint = factory.getInstance("2");
//调用工厂2生产B
cameraPoint.doSomething();