Когда вместо статического шаблона используется статический класс? - PullRequest
3 голосов
/ 09 января 2012

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

Ответы [ 2 ]

7 голосов
/ 10 января 2012

Используйте статический «служебный» класс (класс, в котором нет ничего, кроме статических методов), когда у вас есть методы «только кода» - методы, в которых не требуется какая-либо конкретная реализация базового класса или интерфейса,Ключевым индикатором является то, что код не имеет состояния - то есть в классе нет (статических) полей, чтобы присвоить ему состояние.Отсутствие состояния также означает, что методы автоматически поточно-ориентированы - еще одно преимущество.

Существует множество примеров в JDK (Collections - один из примечательных примеров) и библиотеки Apache Commons. этого шаблона работает очень хорошо.

Кроме того, чтобы избежать «раздувания классов», вместо того, чтобы иметь класс для конкретной тривиальной реализации, вы можете иметь статические (абстрактные) фабричные методы, которые возвращают конкретная реализация, например:

public static Comparator<String> createCaselessStringCompatator() {
    return new Comparator<String> () {
        public int compare(String o1, String o2) {
            return o1.toUpperCase().compareTo(o2.toUpperCase());
        }
    }; 
}

public static Comparator<String> createNumericStringCompatator() {
    return new Comparator<String> () {
        public int compare(String o1, String o2) {
            return new Double(o1).compareTo(new Double(o2));
        }
    }; 
}

Этот шаблон избегает создания целого нового файла класса, что составляет всего одну строку фактического полезного кода (то есть " замыкание * 1020"* ") и связывает их вместе, поэтому, если вы знаете имя вашего служебного класса, ваша IDE предложит вам указать, что вы хотите выбрать:

Collections.sort(myStringList, MyComparators.|<-- ctrl+space to offer options

Принимая во внимание, что без этого шаблона,вам нужно будет запомнить имя класса каждой из реализаций.

1 голос
/ 09 января 2012

Я думаю, что в этом случае вам требуется место для некоторых служебных функций, которые снова являются статическими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...