简单了解策略模式

什么是策略模式?

策略模式提供生成某一种产品的不同方式

Strategy策略类定义了某个各种算法的公共方法,不同的算法类通过继承Strategy策略类,实现自己的算法

Context的作用是减少客户端和Strategy策略类之间的耦合,客户端只需要调用Context并且传递相应的算法参数,来调用不同的算法,Context的内部实现可以用一个Map<id, Strategy>,在Spring启动的时候,会把Strategy类自动装配进Map

image-20240104171319410

Spring的策略模式

Resource getResource(String location) 根据传入的 location(算法参数)返回一个资源子类(具体算法),如 ClassPathResource 内部定义了解析 xml 的方法

else if (location.startsWith(CLASSPATH_URL_PREFIX)) {
    return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
}
else {
    try {
       // Try to parse the location as a URL...
       URL url = ResourceUtils.toURL(location);
       return (ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url));
    }
    catch (MalformedURLException ex) {
       // No URL -> resolve as resource path.
       return getResourceByPath(location);
    }
}

getInstantiationStrategy().instantiate(),如果需要被反射创建的 bean 的方法没有覆写,直接用无参构造器创建,否则用CGLIB创建。

相关推荐

  1. 简单工厂、工厂方法、抽象工厂和策略模式

    2024-03-31 09:06:01       57 阅读
  2. SpringBoot+Vue实现简单的文件上传(策略模式

    2024-03-31 09:06:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 09:06:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 09:06:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 09:06:01       87 阅读
  4. Python语言-面向对象

    2024-03-31 09:06:01       96 阅读

热门阅读

  1. pytest中文使用文档----9集成文档测试

    2024-03-31 09:06:01       48 阅读
  2. Linux|如何管理多个Git身份

    2024-03-31 09:06:01       40 阅读
  3. wifi密码,pc端

    2024-03-31 09:06:01       38 阅读
  4. git commit message 规范

    2024-03-31 09:06:01       39 阅读
  5. git总结

    2024-03-31 09:06:01       40 阅读
  6. MindOpt APL向量化建模语法的介绍与应用(1)

    2024-03-31 09:06:01       38 阅读
  7. Finetuned Language Models Are Zero-Shot Learners

    2024-03-31 09:06:01       33 阅读