代码之家  ›  专栏  ›  技术社区  ›  Engineer

图形限制-我应该使用decorator吗?

  •  0
  • Engineer  · 技术社区  · 14 年前

    我有一个函数式的AdjacenCylistGraph类,它依附于一个定义的接口图形结构。为了对其进行分层限制(例如非循环、非空、唯一顶点数据等),我可以看到两个可能的路由,每个路由都使用图形结构接口:

    1. 创建一个类(“ControlledGraph”),该类具有一组指定各种可能限制的位标志。处理这个类中的所有限制。如果新的限制要求变得明显,则更新类。

    2. 使用decorator模式(di,本质上)为客户机类可能希望使用的每个单独的限制创建一个单独的类实现。这样做的好处是我们坚持单一责任原则。

    我会倾向于后者,但靠在乔夫!我讨厌装饰图案。在我看来,这是杂乱的缩影。事实上,这一切都取决于在最坏的情况下有多少装修工——在我看来,这个数字是7(这个阶段我认识到的离散限制的数量)。decorator的另一个问题是,我必须将接口方法包装在每个…单身…Decorator类。呸。

    如果有的话,你会选择哪一个?或者,如果你能提出一些更优雅的解决方案,那将是受欢迎的。

    编辑:我突然想到,在这里使用提议的带有策略模式的ControlledGraph类可能会有所帮助…一些模板方法/函数的设置,在各种图形规范化接口方法中单独的位应用单独的控件。还是我失去了阴谋?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Engineer    14 年前

    啊,我现在看到了。ControlledGraph类中的策略模式确实是一种方法。

    每个限制都是一个离散的策略类。这些方法中的每一个都实现了整个graphstructure接口,尽管大多数方法都是空的(例如,非循环限制只对使用addedge()来防止循环插入感兴趣,而其他方法则是空的)。

    每次ControlledGraph调用它的一个接口方法时,它将调用它所包含的每个策略/限制的匹配方法。显然,它可能只包含每种策略中的一种。

    推荐文章