代码中使用工厂模式

创建枚举类,一共几种工厂(按照统一规范分别产出不同的产品)

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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值