Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Java 8 - Fatal编程技术网

Java 在多个类实例上传输对象

Java 在多个类实例上传输对象,java,design-patterns,java-8,Java,Design Patterns,Java 8,我正在考虑一种优化设计模式,我可以使用它将对象转移到不同类中的方法,而不是将它们作为参数传递 class A{ } class B{ public A a; public B() { a = new A(); } } class C { public void c() { //need to access "a" of class B other than passing "a" as argument;

我正在考虑一种优化设计模式,我可以使用它将对象转移到不同类中的方法,而不是将它们作为参数传递

class A{
}

class B{
   public A a;
   public B()
    {
       a = new A();
    }
}

class C
 {
    public void c()
      { 
         //need to access "a" of class B other than passing "a" as argument; 
      }
 }

在这里,需要在许多其他类方法中访问class a属性中的
a
。除了将此对象(
a
)作为参数传递之外,是否存在最佳设计模式或任何可能的方式

很难说你的程序是如何构造的,但我想到了两个选项:


  • B
    的实例传递给
    C
    的构造函数


  • 如果类
    A
    只存在一个实例(即单个实例)。这意味着class
    B
    持有class
    A
    的一个实例,不是class
    B
    的每个实例都持有class
    A
    的一个实例


  • 高度依赖于
    A
    B
    C
    的实际角色。你能更具体一点吗?你所说的A、B和C的实际角色是什么意思?有什么好的来源可以阅读吗?这也取决于班级的原因。如果类a可以全局共享同一实例,则可以创建单例。否则你真的必须通过构造函数来传递它。@com2ghz谢谢你的回答。我将介绍单例设计模式。这是不是意味着我们只有两种选择不会编译。使用singleton是解决此问题的最佳方法。非常感谢。
    class A {};
    class B {
       public A a;
       public B() {
           a = new A();
       }
    };
    class C {
        public B b;
        public C( B b ) {
            this.b = b;
        }
        public void someMethod() { 
            System.out.println( b.a );
        }
    };
    
    class A {};
    class B {
       public static final A a = new A();
    };
    class C {
        public void someMethod() { 
            System.out.println( B.a );
        }
    };