Что это за шаблон дизайна? - PullRequest
3 голосов
/ 25 мая 2010

Я знаю, что все, что мы делаем в программировании, может быть описано как шаблон проектирования (даже у абстрактного метода есть шаблон проектирования, называемый методом шаблона)


public class Guicer extends AbstractModule {
    private static Injector injector = Guice.createInjector(new Guicer());

    public static void setInjector(Injector injector) {
        Guicer.injector = injector;
    }

    public static <T> T getInstance(Class<T> c) {
        return injector.getInstance(c);
    }

    @Override
    protected void configure() {

    }
}

Какие шаблоны проектирования используются в этом коде? Я хотел бы вызвать этот класс GuiceStateHolder, но я не уверен в этом.

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Да, я согласен, что это не совсем канонический пример какого-либо паттерна, но я вижу элементы внедрения зависимостей (очевидно, он использует Guice) и фабричный метод (getInstance()).

1 голос
/ 25 мая 2010

Ну, я бы назвал этот бит:

private static Injector injector = Guice.createInjector(new Guicer());

public static void setInjector(Injector injector) {
    Guicer.injector = injector;
}

глобальная переменная только для записи.

А здесь:

public static <T> T getInstance(Class<T> c) {
    return injector.getInstance(c);
}

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

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

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

1 голос
/ 25 мая 2010

Этот фрагмент не представляет шаблон дизайна из каталога . Шаблоны (кроме Singleton) обычно представляют более сложные отношения, чем установка изменяемой реализации чего-либо по умолчанию.

...