设计模式在具体任务中的应用

时间:2016-02-18 00:37:33

标签: design-patterns predict recursive-datastructures

输入示例:

<pdf>
    <page 1><addressbox><value>adress 1</value></addressbox></page>
    <page 2><addressbox><value>adress 2</value></addressbox></page>
    <page 3><addressbox><value>adress 2</value></addressbox></page>
    <page 4><addressbox><value>adress 2</value></addressbox></page>
    <page 5><addressbox><value>adress 3</value></addressbox></page>
    <page 6><addressbox><value></value></addressbox></page>
    <page 7><addressbox><value>adress 3</value></addressbox></page>
    <page 8><addressbox><value>adress 4</value></addressbox></page>
    <page 9><addressbox><value>i am not a adress</value></addressbox></page>    
    <page 10>
        <addressbox>
            <value>adress 6</value>
            <collect>true</collect>
        </addressbox>
    </page>
    <page 11><addressbox><value>address 7</value></addressbox></page>
    <page 12><addressbox><value>address 2</value></addressbox></page>
</pdf>
</code>

目标: 将页面收集到逻辑单元

定义: 如果字符串的值以&#34;地址&#34;开头。然后它是一个有效的地址,否则不是。

规则:

  • 首页启动逻辑单元
  • 以下页面属于上一个逻辑单元,如果它具有相同的值或为空值或者为collect = true

结果应如下所示:

<unit>
    <unit 1>page1</unit>
    <unit 2>page2, page3, page4</unit>
    <unit 3>page5, page6, page7</unit>
    <unit 4>page8</unit>
    <unit 5>page9</unit>
    <unit 6>page10, page11</unit>
    <unit 7>page12</unit>

</unit>

我想解决设计模式的问题,因为规则可能会略有改变。 得到了模式访问者,装饰者,复合物和责任链,但没有找到任何东西。

您会推荐哪种模式?

1 个答案:

答案 0 :(得分:1)

您需要使用状态设计模式。我将简要解释一下,然后附上一张不言自明的白板图 -

  1. 系统有2个状态 -
    1. 新单位状态 - 当它获得满足新单位标准的页面时,就像第一页一样 - 应用程序进入新状态。
    2. 相同的单位状态 - 当它获得相同的单位时,它进入此状态
  2. 你需要创造国家&#39;状态模式实现中这两种状态的子类。
  3. 输出的单位编号所需的单位数将保留在状态模式的上下文中。
  4. enter image description here

    (要获得有关如何实施状态模式的完整详细信息,请参阅我的博客文章 - http://www.javabrahman.com/design-patterns/state-design-pattern-in-java/