Размещение общих атрибутов в соответствующем классе - PullRequest
0 голосов
/ 06 июля 2018

У меня есть объект A, который содержит объект B в качестве одного из его атрибутов, который также имеет объект C в качестве одного из его атрибутов. У меня также есть некоторые атрибуты, которые являются общими для всех этих 3 объектов.

Где я должен разместить эти общие атрибуты, чтобы не создавать несколько копий, и предположить, что если я передам объект C функции, то будут открыты только свойства объекта C. Если я помещу атрибуты в класс C, чтобы получить общие атрибуты, мой код должен будет зависеть от метода get объекта C. Если я помещу их в класс A, то некоторые свойства, которые не требуются для объекта C, будут видны ему.

1 Ответ

0 голосов
/ 06 июля 2018

Если A, B, C имеют общие свойства, они могут совместно использовать интерфейс с геттерами для этих свойств. Если у вас есть такой интерфейс, скажем

interface CommonInterface {
 Object getMyProperty()

}
 class B extends CommonInterface {           
    [....]
 }
 class A extends CommonInterface {
    private CommonInterface B myBInstance;  
       [....]
 }   

На данный момент вы можете использовать шаблон ChainOfResposibility: реализовать абстрактный класс как

abstract class CommonProperties implements CommonInterface {
  protected CommonProperties successor;

public void setSuccessor(PurchasePower successor) {
  this.successor = successor;
}

public Object processRequest(YourRequestClass request){
  // Obviosuly here you can put the condition you need not necessarily "!= null"
  if (request.getMyProperty() != null) {
     return getMyProperty();
  // else the request goes to the linked class
  } else if (successor != null) {
     successor.processRequest(request);
}

где сейчас

class B extends CommonProperties {
    [....] 
} 
class A extends CommonProperties {    
    private CommonProperties B successors;  
    [....] 
}
...