栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Spring配置Abstract Factory的实现类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Spring配置Abstract Factory的实现类

有两种不同的类似Spring的方式可以处理此问题。我个人追求的方法看起来像这样:

public interface ScaleFactory {    public Scale newInstance();    public String type();}public class FirstScaleFactory implements ScaleFactory {    public Scale newInstance() {        return new FirstScale();    }    public String type() {        return "first";    }}public class SecondScaleFactory implements ScaleFactory {    public Scale newInstance() {        return new SecondScale();    }    public String type() {        return "second";    }}public class ScaleManager {    private final Map<String, ScaleFactory> factories;    @Autowired    public ScaleManager(List<ScaleFactory> factories) {        this.factories = factories.stream() .collect(Collectors.toMap(f -> f.type(), Function::identity));    }    public Scale newInstance(String type) {        return Optional.ofNullable(factories.get(type)) .map(factory -> factory.newInstance()) .orElseThrow(IllegalArgumentException::new);    }}

使用这种方法,您

ScaleManager
可以成为标准的Spring
bean,可以将其连接到任何需要scale实例的类中。在初始化时,它将获取
ScaleFactories
Spring上下文中定义的所有内容,并将它们自动连接为
List<ScaleFactory>
,然后将其转换为a
Map
(其中
ScaleFactory
类型为键)。这样可以避免担心的类名
Scale
,并且可以稍后更改它们(只要您保持
type
键的一致性)。

ScaleFactory
然后,您的实现可以执行他们需要做的任何事情。例如,如果您拥有一种
Scale
不可变的类型,则可以让工厂每次都返回相同的实例。另外,您可以让每个调用返回一个单独的实例-
实例化
Scale
取决于实现的工厂。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号