Есть ли название для этого варианта паттерна стратегии? - PullRequest
0 голосов
/ 12 июня 2018

Класс стратегии применяется в зависимости от выполнения определенного условия.Стратегия «выбрана» как бы.Шаблон стратегии 101.

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

Пример:

public interface BookValidator {
    enum PublishType { PAPER_BACK, HARD_COVER, EPUB }

    PublishType validationFor();
    boolean validate(Book book);
}

class HardcoverBookBindingValidator implements BookValidator {
    public PublishType validationFor() { return PublishType.HARD_COVER; }
    public boolean validate(Book book) { /* perform validation */ }
}

class HardCoverPaperqualityValidator implements BookValidator {
    public PublishType validationFor() { return PublishType.HARD_COVER; }
    public boolean validate(Book book) { /* perform validation */ }
}

class EpubSectionsValidator implements BookValidator {
    public PublishType validationFor() { return PublishType.EPUB; }
    public boolean validate(Book book) { /* perform validation */ }
}

class EpubIndexValidator implements BookValidator {
    public PublishType validationFor() { return PublishType.EPUB; }
    public boolean validate(Book book) { /* perform validation */ }
}

// etc.

public boolean validateBook(Book book) {
    for (BookValidator validator: allBookValidators) {
        if (validator.validationFor() == book.type() && !validator.validate(book)) {
            return false;
        }
    }
    return true;
}

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

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

...