我需要创建在整个程序(在各种类中)中可见的对象。我不想为此类类创建单例,因为我可能需要一些实例。因此,我创建了一个 Singleton 类型的类作为容器,并在其中创建了可以在程序中随时使用的对象。
下面是一个示例代码,您可以在其中看到发生了什么。引用 Container
的实例,我将始终可以访问在那里创建的设施。我正在建立一个学习计划。会有很大但我想出了解决问题的想法。问题是不同的 Controller 想要一个明确的对象那里有任何数据。然后基于完整的对象进行计算。
public class Person {
String name;
String surname;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public Person(){
}
}
.
public class Container {
private Person person1;
private Person person2;
private static Container singleton = new Container( );
public Container() {
person1 = new Person();
person2 = new Person();
}
public Person getPerson1(){
return person1;
}
public Person getPerson2(){
return person2;
}
public static Container getInstance( ) {
return singleton;
}
}
.
public class Test {
public static void main(String[] args) {
Person person;
Container singleton = Container.getInstance();
person = singleton.getPerson1();
person.setName("John");
Person personTest1;
Container singleton2 = Container.getInstance();
personTest1 = singleton2.getPerson1();
System.out.println(personTest1.getName());
}
}
输出:
约翰
它可能不是最好的解决方案,但还没有找到像这样简单快捷的解决方案。你怎么看?
最佳答案
我只是想说几点:Container
是您的 Person
工厂,不应该被客户端实例化。
否则,客户端可以创建多个版本的 person1
和 person2
。
想象一下这段代码:
Container singleton = Container.getInstance();
Person person = singleton.getPerson1();
person.setName("John");
Container singleton2 = new Container();
Person personTest1 = singleton2.getPerson1();
System.out.println(personTest1.getName());
为避免这种情况,您应该将构造函数设为私有(private)。
public class Container {
...
private Container() {
person1 = new Person();
person2 = new Person();
}
...
}
关于java - 作为对象容器的 Singleton 类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41221906/