Какой шаблон Java для реализации с аналогичными объектами передачи данных - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть класс, который я сейчас использую как dto, и я должен создать другой класс с похожими свойствами (меньше, чем у фактического), есть ли шаблон, связанный с этим? Я думал, что адаптер поможет, но я не мог понять, как.

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;
}

Любая подсказка?

Ответы [ 3 ]

0 голосов
/ 13 апреля 2019

Предпочитаю композицию наследованию.

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

class TWO {
  ObjectB ob;
  ObjectC oc;
  String name;
  String someId;
  String country;
}
0 голосов
/ 13 апреля 2019

Здесь вы должны указать, имеет ли смысл использование наследования / композиции или нет. С именами классов ONE и TWO трудно сказать, поэтому позвольте мне привести еще один пример. Скажем, у нас есть класс Vehicle и Phone, например,

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

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

Здесь классы Vehicle и Phone имеют несколько общих полей. Но вы не можете изменить Phone, как это так

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

или

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

Прежде чем использовать какой-либо шаблон проектирования где-либо, вы должны подумать, оправдано ли его использование в этом сценарии. Не используйте шаблоны проектирования только ради их использования.

Возвращаясь к примеру, если ОДИН и ДВА не связаны ни в каком смысле, вы должны оставить их в покое. Но если они есть, вы можете использовать наследование или композицию. Вот ссылка , которую вы, возможно, захотите пройти, прежде чем сделать этот выбор.

0 голосов
/ 12 апреля 2019

Я вижу два варианта использования:

  1. Наследование : создайте ДВА суперкласса (меньше свойств) и ОДИН сабвуфер, поскольку у него больше свойств (свойства ДВУХ и других свойств).
  2. Интерфейс и абстрактный класс : В соответствии с описанной проблемой я предлагаю использовать вышеуказанное наследование (в 1.).

Пример использования супер и подкласса

class ONE extends TWO{

    ObjectA oa;

    String id;

}

class TWO {

    ObjectB ob;

    ObjectC oc;

    String name;

    String someId;

    String country;

}
...