设计模式在具体任务中的应用
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" 开头,那么它是一个有效地址,否则不是。
规则:
- 第一页开始一个逻辑单元
- 如果以下页面具有相同值或为空值或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>
我想用设计模式来解决问题,因为规则可能会略有变化。
查看了 Pattern Visitor、Decorator、Composite 和 Chain of responsibility,但没有真正找到一些东西。
您会推荐哪种模式?
您需要使用状态设计模式。我将简要解释一下,然后附上一张不言自明的白板图图片 -
- 系统有2个状态-
- 新单元状态 - 当它获得满足新单元标准的页面时,就像第一页一样 - 应用程序进入新状态。
- 相同单位状态 - 当它获得相同单位时进入此状态
- 您需要在状态模式实现中为这两个状态创建状态的子类。
- 输出单元编号所需的单元计数将在状态模式的上下文中维护。
(要获取有关如何实现状态模式的完整详细信息,您可以参考我在同一网址上的博客文章-http://www.javabrahman.com/design-patterns/state-design-pattern-in-java/)
输入示例:
<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" 开头,那么它是一个有效地址,否则不是。
规则:
- 第一页开始一个逻辑单元
- 如果以下页面具有相同值或为空值或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>
我想用设计模式来解决问题,因为规则可能会略有变化。 查看了 Pattern Visitor、Decorator、Composite 和 Chain of responsibility,但没有真正找到一些东西。
您会推荐哪种模式?
您需要使用状态设计模式。我将简要解释一下,然后附上一张不言自明的白板图图片 -
- 系统有2个状态-
- 新单元状态 - 当它获得满足新单元标准的页面时,就像第一页一样 - 应用程序进入新状态。
- 相同单位状态 - 当它获得相同单位时进入此状态
- 您需要在状态模式实现中为这两个状态创建状态的子类。
- 输出单元编号所需的单元计数将在状态模式的上下文中维护。
(要获取有关如何实现状态模式的完整详细信息,您可以参考我在同一网址上的博客文章-http://www.javabrahman.com/design-patterns/state-design-pattern-in-java/)