Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在适当的类中放置公共属性_Java_Composition - Fatal编程技术网

Java 在适当的类中放置公共属性

Java 在适当的类中放置公共属性,java,composition,Java,Composition,我有一个对象A,其中包含对象B作为它的属性之一,它还包含对象C作为它的属性之一。我也有一些属性,这是共同的所有这3个对象 我应该将这些公共属性放置在何处,以便不创建多个副本,并且假设如果我将对象C传递给函数,则只显示对象C的属性。如果我将属性放在类C中,那么为了获得公共属性,我的代码必须依赖于对象C的getter方法。如果我将它们放在类A中,那么对象C不需要的一些属性将对它可见。如果A、B、C有公共属性,它们自然可以与这些属性的getter共享一个接口。一旦你有了这样的接口,比如 interfa

我有一个对象A,其中包含对象B作为它的属性之一,它还包含对象C作为它的属性之一。我也有一些属性,这是共同的所有这3个对象


我应该将这些公共属性放置在何处,以便不创建多个副本,并且假设如果我将对象C传递给函数,则只显示对象C的属性。如果我将属性放在类C中,那么为了获得公共属性,我的代码必须依赖于对象C的getter方法。如果我将它们放在类A中,那么对象C不需要的一些属性将对它可见。

如果A、B、C有公共属性,它们自然可以与这些属性的getter共享一个接口。一旦你有了这样的接口,比如

interface CommonInterface {
 Object getMyProperty()

}
 class B extends CommonInterface {           
    [....]
 }
 class A extends CommonInterface {
    private CommonInterface B myBInstance;  
       [....]
 }   
此时,您可以使用ChainOfResponsibility模式:将抽象类实现为

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;  
    [....] 
}

请显示您的类的代码(将它们缩短为基本代码或创建一个简单但等效的示例来显示您的问题)。“我应该将这些公共属性放置在何处以便不创建多个副本”-请确保
a
B
C
具有相同的属性,或者它们依赖于具有某些属性的对象。因为假设
id
是公共属性,所以所有三个对象都必须有自己的
id
属性副本。我觉得你的案子有点依赖性,这要看情况而定™ 用a、B、C这样抽象的概念很难找出一个模型