java - 作为对象容器的 Singleton 类型的类

标签 java oop

我需要创建在整个程序(在各种类中)中可见的对象。我不想为此类类创建单例,因为我可能需要一些实例。因此,我创建了一个 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 工厂,不应该被客户端实例化。
否则,客户端可以创建多个版本的 person1person2

想象一下这段代码:

    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/

相关文章:

java - 一些 JMenus 没有出现

java - 正则表达式限制一些特殊字符

java - 将 MongoClient 与列表 ServerAddress 一起使用时出现 com.mongodb.MongoTimeoutException

c++ - 我在这里违反了 OOP 设计指南吗?几个有趣的设计泡菜

C++ 继承和成员函数指针

python - 从静态方法访问静态变量

java - Math.pow 重复调用会产生不同的结果

java - java中如何将消息从工作线程传递到GUI

c# - 如何在没有抽象基类的情况下强制覆盖后代中的方法?

ios - 在父类(super class)中测试它是否是子类然后完成操作或将它们分开是更好的编程实践吗