【问题标题】:Design pattern for a class that works on a collection of other objects?适用于其他对象集合的类的设计模式?
【发布时间】:2009-10-26 18:17:25
【问题描述】:

我有一个 User 模型,它可以保存 1-n 个 UserGroup 模型,每个模型都保存有关用户与特定组的关系的数据(例如,如果他们是组的管理员,当他们加入组时,等等)。

我想提供一些辅助方法,例如 isGroupUser() 和 isGroupAdmin(),它们适用于存储在 User 模型中的整个 UserGroup 模型集。目前这些方法在 User 模型中,但它们只是模型大小的两倍。

将适用于 UserGroup 模型的代码推送到自己的类中是否有意义?因此,User 模型将包含此“接口”类的单个实例,该实例现在也将包含要处理的 UserGroup 模型。我觉得这样可以很好地分离相关代码,并且用户模型不会变得不堪重负。

另外,这种事情有设计模式吗?似乎一个适用于其他对象集合的类会很常见。

感谢您的洞察!

【问题讨论】:

    标签: language-agnostic design-patterns oop


    【解决方案1】:

    迭代器:提供一种顺序访问聚合对象的元素而不暴露其底层表示的方法。 [GoF, p257]

    访问者:表示要对对象结构的元素执行的操作。 Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。 [GoF,p331]

    如果您不熟悉设计模式,可以在http://www.vincehuston.org/dp/ 获得快速概览

    【讨论】:

      【解决方案2】:

      我认为这样做的另一大好处是将所有这些 UserAccessControl 或 UserPermissions 推入一个很好的可重用设置或对象中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多