如何在Java中的不同类中使用相同的对象

如何在Java中的不同类中使用相同的对象,java,Java,假设我有3个java类A、B和C 我需要创建一个在A和B中都使用的C类对象,但是单独创建该对象的问题是C类的构造函数被调用了2次。但是我希望构造函数只被调用一次 因此,我想将在类A中创建的对象用于类b。在A和b之外创建对象C,并让A和b的构造函数接受类C的实例 class A { public A( C c ) { .... } } class B { public B( C c ) { .... } } 因此,创建一次对象,并将其传递给A

假设我有3个java类A、B和C

我需要创建一个在A和B中都使用的C类对象,但是单独创建该对象的问题是C类的构造函数被调用了2次。但是我希望构造函数只被调用一次


因此,我想将在类A中创建的对象用于类b。

在A和b之外创建对象C,并让A和b的构造函数接受类C的实例

class A {
   public A( C c ) {
       ....
   }
}

class B {
   public B( C c ) {
       ....
   }
}

因此,创建一次对象,并将其传递给A和B的构造函数:

C c = new C();
A a = new A(c);
B b = new B(c);

...

public class A 
{
    private final C c;

    public A(C c)
    {
        this.c = c;
    }
}

请注意,这在Java中是一种非常常见的依赖项注入形式,因此对象会被告知其协作者,而不是自己构建它们。

是否要共享一个实例?好的,他的呢

C c = new C();
B b = new B(c);
A a = new A(c);
另一个选择是:

B b = new B();
A a = new A(b.c);

或者,如果A和B的构造函数没有在彼此附近调用,那么可以将类c定义为单例。看

然后你会做:

A a = new A(C.getInstance());
B b = new B(C.getInstance());
或者,在
A
B
的构造函数中,只需调用getInstance而不是构造函数,即

// C c = new C();
C c = C.getInstance();

我同意@JonSkeet的观点,即添加C作为构造函数参数的DI风格是Java中常见(且有用)的设计模式