美文网首页
工厂模式初体验

工厂模式初体验

作者: simperLv | 来源:发表于2020-04-22 17:29 被阅读0次

由于需要判断业务找到对应的实现类,又不想写太多if else,然后参考了这篇文章https://www.cnblogs.com/davidwang456/p/10831546.html
就测试了一下简单工厂模式,把心路历程记一下。有些涉及业务具体实现的就省略了

业务场景

该项目就是一个web项目,这里的业务简单概括为,前端传来 表名,id等信息,通过表名去找到对应业务的实现方法

接口类

public interface Operation {
  //编辑
    String declareInfo(param1,param2,XXService xxService);
    //撤回
    String rollback(param1, XXService xxService);
  //删除
    String delDeclare(param);
}

评审业务实现

@Service
public class Assess implements Operation {

    @Override
    public String declareInfo(param1,param2,xxService xxService) {
                //do sth
               return new AssessController(xxService).editAssess(request);
    }

    @Override
    public String rollback(param1, XXService xxService) {
         //do sth
        return new AssessController(xxService).rollBackPerson();
    }

    @Override
    public String delDeclare(param) {
         //do sth
        return new AssessController().delAssessInfo();
    }
}

考试申报业务实现

@Service
public class Exam implements Operation {
    @Override
    public String declareInfo(param1,param2,XXService xxService) {
        //do sth
        return new EnterController(enterService).appraisalDeclare(request);
    }

    @Override
    public String rollback(param1, XXService xxService) {
                //do sth
               return new EnterController(enterService).rollBackPerson();
    }

    @Override
    public String delDeclare(param) {
        //do sth
        return new EnterController().delEnterInfo();
    }
}

后面其他业务实现就直接省略了,差的只是业务不同而已

工厂类

public class OperatorFactory {
    static Map<String, Operation> operationMap = new HashMap<>();
    static {
        //考试报名
        operationMap.put("表名1", new Exam());
        //评审报名
        operationMap.put("表名2", new Assess());
        //职务认定
        operationMap.put("表名3", new Believe());
        //证书补办
        operationMap.put("表名4", new Certificate());
    }

    public static Optional<Operation> getOperation(String operation) {
        return Optional.ofNullable(operationMap.get(operation));
    }
}

控制层(前端访问地址)

@RequestMapping({"editDeclare.do"})
    public String editDeclare(HttpServletRequest request){
        //参数获取
        Operation targetOperation = OperatorFactory
                .getOperation(dto.getAsString("tableName"))
                .orElseThrow(() -> new IllegalArgumentException("没找到申报类型"));
        return targetOperation.declareInfo(request,dto,enterService);
    }

剩下两种业务也只是调用接口方法不同

途中遇到的问题

  • 该项目为前端工程(也不算前端项目吧,有点微服务的意思),业务处理直接在控制层去调用其他业务工程的接口实现,这边之前图省事加了一个service。
    在实现类调用控制层时,因为也没有把Controller注册到Bean容器,所以也没发在实现类去加注解添加实例,然后我就直接new的,但是这样的话 控制层中的service也就没有取到,然后我直接在前端调用的控制层那里获取service再通过参数传过去。
    然后把用到的控制层的依赖注入由接口注入改为构造器注入
 private xxService xxService;
    @Autowired
    public EnterController(xxService xxService) {
        //参数构造方法
        this.xxService = xxService;
    }

    public EnterController() {
        //无参构造方法
    }

虽然问题解决了,但是总感觉怪怪的....
然后又深入了解了一下工厂模式,后续有时间再改吧!现在理解还不透彻,先把任务提交一下,免得领导问。

相关文章

  • 工厂模式初体验

    由于需要判断业务找到对应的实现类,又不想写太多if else,然后参考了这篇文章https://www.cnblo...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 【设计模式】- 工厂模式

    工厂模式分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。 工厂模式:靠工厂生产对象 简单工厂模式中只有一个工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

网友评论

      本文标题:工厂模式初体验

      本文链接:https://www.haomeiwen.com/subject/adabihtx.html