Лучший способ вызвать метод внутри одноэлементного класса

У меня есть синглтон класс

public class Singleton {
static Singleton instance;
public static Singleton getInstance() 
{
    if (instance == null) 
    {
        instance = new Singleton();
    }
    return instance;
}

Рассмотрим метод с публичной функцией (), определенный внутри класса Singleton.

Какой лучший способ вызвать метод внутри одноэлементного класса:

Singleton. method () - метод вызывается статически

или же

Singleton.getInstance.method() - метод не статичный?

7 ответов

Решение

В случае одноэлементных классов статические методы не используются, так как доступен только один экземпляр класса, и каждый собеседник имеет одну и ту же копию этого класса.

поэтому всегда создайте метод экземпляра и вызовите:

Singleton.getInstance().method();

Во-первых, вы должны убедиться, что вы объявили Constructor как частный, чтобы никто не мог его вызвать и заново инициализировать. Следующим образом:

private void Singleton(){
    //Initialize your private data
}

Во-вторых, позвоните static Методы прямо как следующие:

Singleton.yourMethod();

В-третьих, нестатический метод, вызывающий следующее:

Singleton.getInstance().yourMethod();

Вот хороший пример Singleton классы

Если вы хотите использовать шаблон Singleton:

public class Singleton {
    private static Singleton sInstance;

    public static Singleton getInstance() {
        if (sInstance == null) {
            sInstance = new Singleton();
        }

        return sInstance;
    }

    // Prevent duplicate objects
    private Singleton() {

    }

    public void method() {

    }
}

Шаблон синглтона позволяет вам контролировать количество экземпляров, которые существуют в одном классе, то есть только 1. Но сам класс по-прежнему является нормальным классом, который не должен знать, сколько таких существует, и поэтому у него должны быть нормальные методы экземпляров.,

Когда используешь static методы, вы столкнетесь с ужасными проблемами, если захотите изменить количество экземпляров этого класса.

Либо используйте синглтон, либо используйте статические методы.

В первом случае:

Singleton.method();

метод должен быть статичным

Во втором случае:

Singleton.getInstance().method();

метод не является статичным.

Так что это концептуально разные

Здесь у вас есть getInstance() как статический метод, и вы создали method как нестатический метод или метод экземпляра.

Так что для статического метода, Class.method_name Можно использовать формат, но для объекта метода должен быть создан объект.

Это может быть неправильный синтаксис, как показано там:

Singleton.getInstance().method();

Singleton obj = new Singleton();
obj.method();

должен быть правильный формат

Singleton.getInstance() () метод.

лучше, так как при первом вызове экземпляр будет нулевым, а экземпляр создается только в getInstance().

Другие вопросы по тегам