Класс с одним методом - лучший подход? - PullRequest
161 голосов
/ 15 октября 2008

Скажем, у меня есть класс, предназначенный для выполнения одной функции. После выполнения функции ее можно уничтожить. Есть ли основания предпочитать один из этих подходов?

// Initialize arguments in constructor
MyClass myObject = new MyClass(arg1, arg2, arg3);
myObject.myMethod();

// Pass arguments to method
MyClass myObject = new MyClass();
myObject.myMethod(arg1, arg2, arg3);

// Pass arguments to static method
MyClass.myMethod(arg1, arg2, arg3);

Я намеренно размышлял о деталях, пытаясь найти рекомендации для разных ситуаций. Но я не имел в виду простые библиотечные функции, такие как Math.random (). Я думаю больше о классах, которые выполняют какую-то конкретную, сложную задачу, но для этого требуется только один (публичный) метод.

Ответы [ 14 ]

2 голосов
/ 15 октября 2008

Я бы просто сделал все в конструкторе. вот так:

new MyClass(arg1, arg2, arg3);// the constructor does everything.

или

MyClass my_object(arg1, arg2, arg3);
0 голосов
/ 10 февраля 2017

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

0 голосов
/ 31 января 2013

Вы могли бы избежать ситуации все вместе. Попробуйте провести рефакторинг, чтобы вы получили arg1.myMethod1(arg2, arg3). Поменяйте местами arg1 с arg2 или arg3, если это имеет больше смысла.

Если у вас нет контроля над классом arg1, то украсьте его:

class Arg1Decorator
    private final T1 arg1;
    public Arg1Decorator(T1 arg1) {
        this.arg1 = arg1;
    }
    public T myMethod(T2 arg2, T3 arg3) {
        ...
    }
 }

 arg1d = new Arg1Decorator(arg1)
 arg1d.myMethod(arg2, arg3)

Причина в том, что в ООП данные и методы, обрабатывающие эти данные, принадлежат друг другу. Кроме того, вы получаете все преимущества, о которых говорил Марк.

0 голосов
/ 27 июля 2012

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

Вам следует обратить внимание на состояние системы.

...