当前位置: 首页 > 知识库问答 >
问题:

将一个模型转换为另一个模型的设计模式

杨君之
2023-03-14

我正在写一个库在Java,我需要转换(地图)一个模型到另一个,反之亦然。我所做的是实现了一个包含两个泛型类型的抽象转换器类,包含convertTo和convertFrom方法,并从它扩展了我的转换器。

public abstract class TypeConverter<MyType, OtherLibType> {
    private final Function<MyType, OtherLibType> fromMyType;
    private final Function<OtherLibType, MyType> fromOtherLibType;

    public TypeConverter(final Function<MyType, OtherLibType> fromMyType,
                         final Function<OtherLibType, MyType> fromOtherLibType
    ) {
        this.fromMyType = fromMyType;
        this.fromOtherLibType = fromOtherLibType;
    }

    public final OtherLibType convertFromMyType(final MyType myType) {
        return fromMyType.apply(myType);
    }

    public final MyType convertFromJspritType(final OtherLibType otherLibType) {
        return fromOtherLibType.apply(otherLibType);
    }

}

但是对于特定的实现,我可能还需要其他对象来进行转换,我不知道什么是实现这些东西的最佳实践。我想过适配器和门面,但他们似乎不符合我的要求。有没有一个设计模式我可以用来做这个?提前谢谢你。

共有1个答案

秦晋
2023-03-14

我想这应该是一个像

interface Converter<T, R> {
 R convertTo(T source, R target);
 T convertFrom(R source, T target);
}

您的抽象类不需要抽象和直接,通过调用functions来实现这个接口。

然后,您可以有一个包装器,它也实现该接口,并将其调用委托给包装的实现。

class ConverterWrapper<T, I, R> implements Converter<T, R> {
 private Converter<T, I> toIntermediate;
 private Converter<I, R> toResult;

 // add trivial constructor to initialize the fields

 public R convertTo(T source) {
  I intermediate = toIntermediate.convertTo(source);
  return toResult.convert(intermediate);
 }
 public T convertFrom(R source) {
  I intermediate = toResult.convertFrom(source);
  return toIntermediate.convertFrom(intermediate);
 }
}
 类似资料:
  • 问题内容: 我有一个名为GoogleWeather的类,我想将其转换为另一个CustomWeather类。 有没有可以帮助您转换类的设计模式? 问题答案: 需要做出一个关键决定: 您是否需要转换生成的对象以反映对源对象的将来更改? 如果您不需要这样的功能,那么最简单的方法是将实用程序类与静态方法一起使用,这些静态方法根据源对象的字段创建新对象,如其他答案所述。 另一方面,如果您需要转换后的对象来反

  • 我已经使用tensorflow后端训练了一个DNN,我想在FireBase中托管它。训练好的模型被保存为.meta文件,我尝试使用下面的代码将模型转换为tflite,但我遇到了一些错误。那么我如何将这个模型转换成Tensorflow Lite呢?

  • 我需要向现有模型添加层。然而,我需要在“主模型级别”添加层,也就是说,我不能使用经典的函数方法。例如,如果我使用以下内容: 我获得: 因此,我获得了一个带有嵌套子模型的模型。相反,我将嵌套子模型的层(移动网)“添加”到新的顶层(即在reshape_4之后)。我尝试使用: 它适用于简单的顺序模型(如vgg、mobilenet),但对于连接不严格顺序的更复杂模型(如inception、resnet),

  • 问题内容: 我正在建立一个包括条目之间关系的通讯簿。我为个人,公司,场地和角色有单独的模型。在我的索引页面上,我想列出每个模型的所有实例,然后对其进行过滤。这样一个人可以轻松地搜索和查找条目。我已经能够使用通用视图列出单个模型,并使用get_extra_context显示另一个模型: 我还可以使用自定义视图列出单个模型: 这是这两个测试的urls.py: 所以我的问题是“如何修改此参数以将更多模型

  • 在本节中,您将添加一些类,这些类用于管理数据库中的电影。这些类是ASP.NET MVC 应用程序中的"模型(Model)"。 您将使用.NET Framework 数据访问技术Entity Framework,来定义和使用这些模型类。Entity Framework(通常称为 EF) 是支持代码优先 (Code First) 的开发模式。代码优先允许您通过编写简单的类来创建对象模型。(相对于"原始

  • 模型设计 监控模型 CAT主要支持以下四种监控模型: Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数 Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小 Heartbeat 表示程序内定