首页 / JAVA / 转换Java对象的最佳实践/模式
转换Java对象的最佳实践/模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了转换Java对象的最佳实践/模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1955字,纯文字阅读大概需要3分钟。
内容图文
假设我有一个应用程序负责接收供应商消息并转换为规范消息.例如:
public class MessageA extends VendorMessage { ... }
public class MessageB extends VendorMessage { ... }
public class MessageX extends CanonicalMessage { ... }
public class MessageY extends CanonicalMessage { ... }
MessageA映射到MessageX,MessageB映射到MessageY.
我的方法是每个消息类型有一个变换器类来处理这种转换.在这个例子中,我将有以下变换器:
public class MessageXTransfomer()
{
public MessageX transform(MessageA message) {...}
}
public class MessageYTransfomer()
{
public MessageY transform(MessageB message) {...}
}
我的问题实际上是我最终调用变形金刚的方式.
由于我的进程需要一些VendorMessage作为输入,我需要查询类型,以便我知道将哪个特定的转换器指向它.例如,一种方法可能如下所示:
public class TransfomerService
{
MessageXTransformer messageXTransformer = new MessageXTransformer();
MessageYTransformer messageYTransformer = new MessageYTransformer();
public CanonicalMessage transform(VendorMessage message)
{
if (message instanceOf MessageA)
{
return messageXTransformer.transform((MessageA) message);
}
else if (message instanceOf MessageB)
{
return messageYTransformer.transform((MessageB) message);
}
}
}
我不知道为什么,但我这种方法感觉很奇怪 – 好像我做错了什么.我应该使用这种问题的最佳做法吗?
注意:我正在寻找最佳方法而不使用任何转换框架等.理想情况下,只使用基本Java就可以实现该模式.
解决方法:
我喜欢@javaguy的答案,但它并不完整.当然,如果您可以像后面的例子中那样使用特定的变换器,那将是很好的,但如果你不能,你必须坚持使用TransformerFacade和StrategyPattern:
public class TransformerFacade {
private Map<Class, VendorMessageToCanonicalMessageTransformer> transformers = new HashMap<>();
{
// this is like strategies, the key may be class, class name, enum value, whatever
transformers.put(MessageA.class, new MessageXTransformer());
transformers.put(MessageB.class, new MessageYTransformer());
}
public CanonicalMessage transform(VendorMessage message) {
return transformers.get(message.getClass()).transform(message);
}
}
内容总结
以上是互联网集市为您收集整理的转换Java对象的最佳实践/模式全部内容,希望文章能够帮你解决转换Java对象的最佳实践/模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。