java - 是否有任何标准方法可以将对象转换为不同的对象?

标签 java design-patterns

我遇到了一个特殊情况,我已经实现了构建器模式。其中一个变量的类型为ExternalClassA,而传递给构建器的参数的类型为InternalClassA。目前我使用了如下方法:

Class Parent {
   String variableX;
   int variableY;
   ExternalZ variableZ;
   public static builder {
   ....
   ExternalZ varz;
   /* .. builder logic */
   private builder withExternalZ(InternalZ internalZ) { //This is the transform method I'm using currently
   this.variableZ.getSomeObject().setX(this.internalZ.getSomeObject().getX()); //Similar kind of lines making my transform method look ugly
    }
}

有什么方法可以让我的 withExternalZ 方法看起来更简单吗?目前我正在考虑实现 Mapper 模式或 Java8 函数(如 http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/ 中所述)。 Mapper 似乎不是一个好的选择,因为我只需要一种方式转换。

如果有人有更好、更简单的方法,请分享。

最佳答案

当前您正在将一个 InternalZ 实例传递给 withExternalZ() 方法,该方法实际上需要\期望一个ExternalZ 对象。但是您手头有一个InternalZ 方法。

适配器模式是为此类场景而构建的,因为它将目标接口(interface)(InternalZ)调整/转换为客户端期望的接口(interface)(ExternalZ)。简而言之,您需要编写一个从InternalZ 对象转换为ExternalZ 对象的适配器。适配器类代码大致如下 -

public class IntToExtZAdapter extends ExternalZ{
  InternalZ internalZ=null;
  public IntToExtZAdapter(InternalZ internalZ){
    this.internalZ=internalZ;
  }
  public X getX(){
   //Logic for getting X from internalZ object in adapter
  }
  public setX(X x){
   //Logic for setting X in internalZ object in adapter
  }
  //...and so on
 }

然后不要这样做 -

private builder withExternalZ(InternalZ internalZ) { //This is the transform method I'm using currently
this.variableZ.getSomeObject().setX(this.internalZ.getSomeObject().getX()); //Similar kind of lines making my transform method look ugly
}

你现在要做的是 -

this.variableZ=new IntToExtZAdapter (internalZ);

现在您可以按原样使用variableZ,并且内部IntToExtZAdapter将在InternalZ和ExternalZ之间进行调整/转换。

从InternalZ到ExternalZ来回转换的所有“丑陋”逻辑现在都“隐藏”在适配器内部。

关于java - 是否有任何标准方法可以将对象转换为不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005196/

相关文章:

java - 从 Controller ,数据没有转换为 html View 页面

java - 无法将字符串解析为 Java 8 LocalDateTime

java - 如何处理接口(interface)子类的变化?

java - ImageIcon 不会更新具有相同 URL 的新图像

java - -bash : syntax error near unexpected token '(' when running Java program from command line

java - 是否有任何设计模式可以根据设备类型在数据之间切换?

java - 具有不同参数的事件通知的最佳模式是什么?

java - 实现可撤消命令 - Java

c# - 工厂方法可以返回 null 吗?

java - Java 中的 isLocalHost(String hostNameOrIpAddress)