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

Application of design pattern on a concrete task

输入示例:

<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>

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

定义: 如果字符串的值以 "address" 开头,那么它是一个有效地址,否则不是。

规则:

结果应如下所示:

<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>

我想用设计模式来解决问题,因为规则可能会略有变化。 查看了 Pattern Visitor、Decorator、Composite 和 Chain of responsibility,但没有真正找到一些东西。

您会推荐哪种模式?

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

  1. 系统有2个状态-
    1. 新单元状态 - 当它获得满足新单元标准的页面时,就像第一页一样 - 应用程序进入新状态。
    2. 相同单位状态 - 当它获得相同单位时进入此状态
  2. 您需要在状态模式实现中为这两个状态创建状态的子类。
  3. 输出单元编号所需的单元计数将在状态模式的上下文中维护。

(要获取有关如何实现状态模式的完整详细信息,您可以参考我在同一网址上的博客文章-http://www.javabrahman.com/design-patterns/state-design-pattern-in-java/