Design patterns 设计模式-如何在实际案例中使用它
我有一些听起来像这样的业务需求:Design patterns 设计模式-如何在实际案例中使用它,design-patterns,Design Patterns,我有一些听起来像这样的业务需求: 在符合条件(…列出的条件…)的人力资源信息类型中查找数据, 对于每个找到的数据(记录),向给定的收件人发送包含所需文本的电子邮件 目前,我有几套标准可以找到具体的数据,但我知道未来还会有另一套标准。 我决定构建一个解决方案,其中消息的每一组标准和设置都是一个类—搜索代理或其他: public abstract AbstractSearchAgent { public run(){...} public get_results() {...}
在符合条件(…列出的条件…)的人力资源信息类型中查找数据,
对于每个找到的数据(记录),向给定的收件人发送包含所需文本的电子邮件 目前,我有几套标准可以找到具体的数据,但我知道未来还会有另一套标准。
我决定构建一个解决方案,其中消息的每一组标准和设置都是一个类—搜索代理或其他:
public abstract AbstractSearchAgent {
public run(){...}
public get_results() {...}
public send_info() {...}
}
第一个问题:这个概念正确吗
我还想设计一个主应用程序只需实现一次的应用程序。当我获得搜索数据的新标准时,我只添加了另一个子类,其余的都是相同的:
public class myApp {
private AbstractSearchAgent searchagent;
public static void main() {
//for each existing implementation of abstractSearchAgent
//get instance into searchagent
//and execute its methods:
// e.g.
searchagent->run();
searchagent->send_info();
//
// if i wanted to do something else with the result
result = searchagent->get_results();
}
第二个问题:怎么做?:)
我曾想过使用抽象工厂或构建器模式,但我不知道哪种模式适合这种情况,以及如何构建它
有人能帮我决定哪种方法更好吗?基本上,这听起来像是一种非常适合这种工作的方法。您可以使用工厂来创建所需的搜索代理,这是正确的 <> P>为了提高解决方案的长期可维护性,可以考虑将搜索代理实现为基本标准,从而使各个标准更加可重用。当搜索条件可以是复杂的逻辑表达式时,这是最好的,尤其是当这些条件包括NOT/OR运算符时,例如“名称不以“M”开头,并且(年龄小于30或年龄大于50)”。将其作为复合层次结构的实现可以如下所示:
NameFilter -> AgeFilter -> GenderFilter
和标准
NotCriteria
name标准
OrCriteria
age标准
age标准
NameFilter -> AgeFilter -> GenderFilter
还要研究一下规格(http://en.wikipedia.org/wiki/Specification_pattern). 它补充了彼得的答案 规范仍然使用策略和组合,但它专门针对您试图解决的问题类型
我已经用过好几次了。我甚至围绕我的规范编写了一个小型的领域特定语言(使用解释器),因此我可以通过规范语言组装规范组合,而不是用代码构建它们。虽然我的语言看起来一点也不像SQL,但它有着相同的概念感。谢谢你的回答。战略模式正是我所需要的:)