Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计模式-如何在实际案例中使用它_Design Patterns - Fatal编程技术网

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标准
另一种选择是。如果搜索条件可以以线性方式执行,例如“姓名以'M'开头,年龄小于30岁,性别为女性”,则这就足够了。这可以实现为一系列装饰器,如下所示:

NameFilter -> AgeFilter -> GenderFilter

还要研究一下规格(http://en.wikipedia.org/wiki/Specification_pattern). 它补充了彼得的答案

规范仍然使用策略和组合,但它专门针对您试图解决的问题类型


我已经用过好几次了。我甚至围绕我的规范编写了一个小型的领域特定语言(使用解释器),因此我可以通过规范语言组装规范组合,而不是用代码构建它们。虽然我的语言看起来一点也不像SQL,但它有着相同的概念感。

谢谢你的回答。战略模式正是我所需要的:)