zoukankan      html  css  js  c++  java
  • 策略模式经典实战

    策略模式经典实战

    /**
    * 接口
    */
    public interface ITestService {
    public String sayHello();
    }


    //定义一个抽象,处理公共部分
    public class AbstractTest {
    public void commonHandler(){
    System.out.println("AbstractTest#common");
    }
    }

    /**
    * 策略一
    */
    @Service("aFaceServiceStrategyImpl")
    public class ATestServiceStrategyImpl extends AbstractTest implements ITestService {
    @Override
    public String sayHello() {
    commonHandler();
    return "AFaceServiceImpl.sayHello()";
    }
    }

    /**
    * 策略二
    */
    @Service("bFaceServiceStrategyImpl")
    public class BTestServiceStrategyImpl extends AbstractTest implements ITestService {
    @Override
    public String sayHello() {
    commonHandler();
    return "BFaceServiceImpl.sayHello()";
    }
    }

    /**
    * 工厂类
    * 通过入参type选择不同的策略执行
    */
    @Component
    public class ProcessFactroy implements ApplicationContextAware {

    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {//此处特别注意,默认的入参是applicationContext,此处必须修改这个入参,比如改成arg0,否则启动项目会报错
            applicationContext = arg0;
    }

    private static Map<String, ITestService> map = Maps.newHashMap();
    @PostConstruct
    public void register(){
    map.put("a",applicationContext.getBean(ATestServiceStrategyImpl.class));
    map.put("b",applicationContext.getBean(BTestServiceStrategyImpl.class));
    }

    public static ITestService getProcess(String type){
    ITestService iTestService = map.get(type);
    if(iTestService == null){
    throw new RuntimeException("参数不合法");
    }
    return iTestService;
    }

    }


    /**
    * 控制层,通过ProcessFactroy 工厂选择不同策略执行
    */
    @RestController
    public class TestContoller {
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String faceRecognition(@RequestParam("type") String type){
    ITestService iTestService = ProcessFactroy.getProcess(type);
    return iTestService.sayHello();
    }
    }








  • 相关阅读:
    React 中使用 pdf.js 将 pdf 转换成图片
    html2pdf 无法导出 html 中 img 图片的解决方法
    js-xlsx 实现前端 Excel 导出(支持多 sheet)
    React 项目引入 Dva
    项目构建分析和 webpack 优化实践
    《写给大家看的设计书》读书笔记
    2019年六月前端面试经验总结
    UITableView .grouped 类型去除顶部间距
    Ant Design Upload 组件上传文件到云服务器
    家庭动物园下载链接
  • 原文地址:https://www.cnblogs.com/wenhuang/p/13514369.html
Copyright © 2011-2022 走看看