我需要创建在整个程序中可见的对象(在各种类中)。我不想为这些类创建单例,因为我可能需要一些实例。所以我创建了一个类型为Singleton的类作为容器,在其中我创建了可以在程序中的任何位置使用的对象。
下面是一个示例代码,您可以在其中查看正在进行的操作。参考Container
的实例,我将始终可以访问在那里创建的设施。我正在建立一个学习的课程。会有很大但我想出了解决问题的想法。问题是不同的控制器需要一个显式对象,那里有任何数据。然后根据完整对象执行计算。
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());
}
}
输出:
约翰
它可能不是最好的解决方案,但没有找到这样简单快速的解决方案。你觉得怎么样?
答案 0 :(得分:2)
我只有一些评论:Container
您的Person
工厂不应该由客户端实例化。
否则,客户可以创建多个版本的person1
和{ {1}}。
想象一下这段代码:
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());
答案 1 :(得分:0)
我在这里使用枚举。
代码更清晰,使用更多对象更容易扩展,因为每次添加其他内容时都不需要创建getter。
作为奖励,您不必担心线程安全,急切启动或暴露构造函数。
null