java - 复合模式实现

标签 java design-patterns composite

我正在编写涉及复合模式的代码,希望得到一些说明。我有 super 经理、主要经理和普通经理,他们处于降序层次结构中, super 经理在顶部。

我希望 super 经理能够给主要经理一些钱,而主要经理能够给普通经理一些钱。我遇到的问题是我不希望 Main Manager 能够给 Super Manager 一些钱并且我不想使用 instanceof 来确保这一点,因为它违背了 Composite 模式的目的。

我的主管理器和普通管理器扩展了一个名为 gradeManagers 的抽象类,而我的 super 管理器有一个数组列表,可以添加 gradeManagers 类型的组件。

最佳答案

听起来您的层次结构不太适合复合模式。 Composite 模式旨在允许以与单个对象相同的方式处理对象集合。 (想想用 bolt 连接在一起的零件。有时您想将子组件视为可以与其他零件/子组件用 bolt 连接在一起的单个零件。子组件是复合 Material 。)如果我明白你是什么尝试这样做时,您没有要将其视为另一个管理器的管理器对象集合。

尽管如此,无论您是否为此使用 Composite,我都建议添加一个属性(我们称它为 depth),该属性会随着层次结构的向下而增加。然后您可以使用它来实现您的业务规则:一个经理只能给另一个同等或更高深度的经理钱。这允许您以一种避免任何对象类概念的方式进行编码。

关于java - 复合模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774277/

相关文章:

java - 以编程方式连接到 wifi 网络(首先访问 ssid)?

design-patterns - 设置 parent 的状态栏文本?

design-patterns - 为什么代理模式需要继承?

Python 复合模式异常处理和 pylint

java - EclipseLink 复合持久性单元类声明

java - View.OnClickListener 在 Android 中用作参数

java - 在 PATH 中找不到 firefox 二进制文件。确保已安装 Firefox。操作系统似乎是 : VISTA

java - 我可以用一个全新的项目覆盖 Git 存储库吗?

c++ - [C++]如何使用std::stack来处理文件/目录层级?

php - Symfony 如何在我的服务中获取容器