使用设计模式创建多渠道

Posted 也许还年轻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用设计模式创建多渠道相关的知识,希望对你有一定的参考价值。

package com.job.center.quartz.service;

/**
 * @author 周志伟
 * @projectname 项目名称: ${project_name}
 * @classname: PayService
 * @description: 支付接口
 * @date 2018/10/12:9:10
 */
public interface PayService {

    public String sum(String key);
}
package com.job.center.quartz.service.pay;

import com.job.center.quartz.common.Pay;
import com.job.center.quartz.dao.QrtzLogMapper;
import com.job.center.quartz.service.PayService;
import com.job.center.quartz.vo.QrtzLogDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author 周志伟
 * @projectname 项目名称: ${project_name}
 * @classname: PayServiceImpl
 * @description:
 * @date 2018/10/12:9:11
 */
@Pay(falg = 11)
@Service("com.job.center.quartz.service.pay.PayServiceImpl")
public class PayServiceImpl implements PayService {

    @Autowired
    private QrtzLogMapper dao;

    @Override
    public String sum(String key) {
        QrtzLogDTO qrtzLogDTO=  dao.findQrtzLogByPrimaryKey(key);
        return "363666";
    }
}
package com.job.center.quartz.common;


import com.job.center.quartz.service.PayService;
import org.reflections.Reflections;

import java.util.HashMap;
import java.util.Set;

/**
 * @author 周志伟
 * @projectname 项目名称: ${project_name}
 * @classname: Payfactory
 * @description:
 * @date 2018/10/12:9:12
 */
public class Payfactory {

    private Payfactory(){}

    /**
     * 饿汉式单利(线程安全)
     */
    private static Payfactory single = new Payfactory();


    public static Payfactory getInstance() {
        return single;
    }

    private static HashMap<Integer,String>  map=new HashMap<Integer,String>();



    public static PayService create(int id) throws Exception {
        return (PayService) SpringUtil.getBean(map.get(id));
    }



      static {
          Reflections reflections = new Reflections("com.job.center.quartz.service.pay");
          Set<Class<?>> set= reflections.getTypesAnnotatedWith(Pay.class);
          for (Class<?> el : set){
              Pay annotation = el.getAnnotation(Pay.class);
              int key =annotation.falg();
              String value=el.getName();
              map.put(key,value);
          }
  }






}
package com.job.center.quartz.controller;

import com.job.center.quartz.common.Payfactory;
import com.job.center.quartz.service.PayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 周志伟
 * @projectname 项目名称: ${project_name}
 * @classname: TestController
 * @description:
 * @date 2018/10/12:15:10
 */
@RestController
@RequestMapping
public class TestController {

    @Autowired
    private PayService payService;

    @RequestMapping("/TEST")
    public void test() throws Exception {
        Payfactory payfactory =Payfactory.getInstance();
        payService=payfactory.create(11);
        payService.sum("11111");
    }

}

 //反射类需要用到的包

<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>RELEASE</version>
</dependency>

以上是关于使用设计模式创建多渠道的主要内容,如果未能解决你的问题,请参考以下文章

使用gradle多渠道打包

使用带有actionscript 3 Flash cs6的矩形或线条创建2D重复模式

webstorm代码片段的创建

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

创建自己的代码片段(CodeSnippet)

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段