使用相似的数据传输对象实施哪种 java 模式

Which java pattern to implement with similar Data Transfer Objects

我有一个 class,我目前像 dto 一样使用它,我必须创建另一个 class 具有相似的属性(少于实际的属性),它有一个与此相关的模式?我认为适配器会有所帮助,但我不知道如何做。

class ONE {
  ObjectA oa;
  ObjectB ob;
  ObjectC oc;
  String id;
  String name;
  String someId;
  String country;
}

class TWO {
  ObjectB ob;
  ObjectC oc;
  String name;
  String someId;
  String country;
}

有线索吗?

我看到两个选项可供使用:

  1. Inheritance:使两个超级 class(更少的属性)和一个子,因为它具有更多属性(两个属性和其他属性的属性)。
  2. Interface and abstract class:根据描述的问题我建议使用上面的继承(in 1.)。

使用 super 和 sub 的示例class

class ONE extends TWO{

    ObjectA oa;

    String id;

}

class TWO {

    ObjectB ob;

    ObjectC oc;

    String name;

    String someId;

    String country;

}

组合优于继承。

class ONE {
  ObjectA oa;
  String id;
  TWO ot;
}

class TWO {
  ObjectB ob;
  ObjectC oc;
  String name;
  String someId;
  String country;
}

在这里你必须推理使用inheritance/composition是否有意义。 class ONETWO 的名字不好说,我再举个例子。比如说,我们有一个 Vehicle 和一个 Phone class 像这样,

class Vehicle {
    String model;
    String color;
    String type;
}

class Phone{
    String model;
    String color;
    String type;
    String brand;
    Integer core;
    Integer ramInGB;
}

这里VehiclePhoneclass有一些共同点。但是你不能像这样改变Phone

class Phone{
    Vehicle v;
    String brand;
    Integer core;
    Integer ramInGB;
}

class Phone extends Vehicle{
    String brand;
    Integer core;
    Integer ramInGB;
}

在任何地方使用任何设计模式之前,您必须判断在该场景中使用它是否合理。不要为了使用而使用设计模式。

回到这个例子,如果 ONE 和 TWO 在任何意义上都不相关,你应该让它们保持联系。但如果是,您可以使用继承或组合。这是一个 link,您可能想在做出选择之前先通读一遍。