假设我有基于某些策略修改的文章:
public class Article {
String header;
String bodyText;
}
处理器对象:
public class ArticleProcessor {
IModifyStrategy modifyStrategy;
Article article;
...
...
modifyStrategy.modifyHeadline(article.getHeader());
...
modifyStrategy.modifyBodyText(article.getBodyText());
}
修正策略:
public interface IModifyStrategy {
String modifyHeadline(String defaultHeader);
String modifyBodyText(String defaultBody);
}
现在我想在我的文章中添加一位作者,他需要首先根据一些条件创建,所以我考虑创建一个工厂,并将其添加到ArticleProcessor中,如下所示:
public class ArticleProcessor {
AuthorFactory authorFactory;
IModifyStrategy modifyStrategy;
Article article;
...
...
modifyStrategy.modifyHeadline(article.getHeader());
...
modifyStrategy.modifyBodyText(article.getBodyText());
...
article.addAuthor(authorFactory.createAuthor(someCondition))
}
然而,到目前为止,我喜欢我的IModifyStrategy收集了一篇文章的所有修改。通过引入如上所述的工厂,我将在代码中的不同位置进行文章修改(例如,在IModifyStrategy和ArticleModifier中)。
所以我想在IModifyStrategy中加入逻辑:
public interface IModifyStrategy {
String modifyHeadline(String defaultHeader);
String modifyBodyText(String defaultBody);
void createAuthor(someCondition)
}
这样,我就可以将我对一篇文章的所有修改集中在代码中的一个地方,为我提供对一篇文章可能进行的修改的良好概述。那么,这里应该选择什么样的模式呢?这个意图实际上是一个创造性的意图,但是使用策略模式的可读性/可理解性会好得多。
另一种选择是在战略中使用工厂。这会不会太过工程化?