Tôi nghĩ câu trả lời bạn đang tìm kiếm là một "mẫu đơn". Đây là nơi bạn chỉ tạo một thể hiện của một lớp để sử dụng ở những nơi khác. Đây là good link to read. Đây là wikipedia page on it với một số ví dụ java.
Vì vậy, mã của bạn sẽ trông như thế này:
public class A {
private final static A instance = new A();
/* private constructor forces you to use the getInstance() method below */
private A() {}
public static A getInstance() {
return instance;
}
}
Sau đó, bất cứ nơi nào bạn muốn để có được một thể hiện của A bạn sẽ làm điều gì đó như:
public class B {
private final A classA = ClassA.getInstance();
...
}
Không có lý do tại sao A
thể cũng không có một thể hiện của B
và gọi phương thức của B
theo các phương pháp riêng của nó. Những gì bạn không thể làm với sự phụ thuộc chéo này là gọi bất kỳ phương thức nào khác trong phương thức khởi tạo.
Nói chung, bằng cách này, các mẫu này nên được sử dụng một cách tiết kiệm. Một cách tốt hơn để thực hiện điều này là thông qua tiêm phụ thuộc thay vì tham chiếu toàn cầu. Cross tiêm là có thể nhưng một lần nữa, nó nên được sử dụng một cách tiết kiệm. Một giải pháp tốt hơn là tái cấu trúc các lớp để có các phụ thuộc tuyến tính.
Có khái niệm nào trong Java có thể tham khảo đối tượng thực tế (như con trỏ) với đối tượng dưới dạng biến thay vì tạo bản sao của đối tượng không?
Java là đi qua giá trị nhưng giá trị của bất kỳ đối tượng là các tham chiếu đến các đối tượng (tương tự như con trỏ trong C mặc dù họ là không một địa chỉ bộ nhớ). Vì vậy, nếu bạn có một thể hiện của A
và gán nó cho một trường khác, trường đó sẽ có cùng giá trị và sẽ tham chiếu cùng một phiên bản A
.
// instantiate a new instance of A
A a1 = new A();
// assign the reference to A to another variable
a2 = a1;
// they are equivalent and both reference the same object
if (a1 == a2) ...
Talk về thiết kế xấu .. – mre
(ObPlead: Xin vui lòng, xin vui lòng, xin vui lòng không sử dụng statics mutable (trước đây gọi là globals). Và bao gồm việc sử dụng các antipattern singleton.) –