战略模式的这种变化是否有名称?

时间:2018-06-12 07:37:56

标签: design-patterns

根据满足特定条件时应用策略类。该策略已被选中'原样。战略模式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 inject them放入每种类型的集合中。基本上是一个美化的工厂。重点是:没有单一的策略对象,除非您计算特定类型的对象集合策略。

0 个答案:

没有答案