java:确保该类型只有一个实例

java:确保该类型只有一个实例,java,oop,composite,Java,Oop,Composite,我遵循以下示例: 我想我只是迭代列表,如果instanceof,replace和put public void addDepartment(Department department) { childDepartments.add(department); } 我也希望保留订单如果Instanceof Department是第一个,我希望它将其保留为第一个,这意味着它应该在Financial Department之前打印SalesDepartment 3您的addDe

我遵循以下示例:

我想我只是迭代列表,如果instanceof,replace和put

public void addDepartment(Department department) {
        childDepartments.add(department);
    }
我也希望保留订单如果Instanceof Department是第一个,我希望它将其保留为第一个,这意味着它应该在Financial Department之前打印SalesDepartment 3

您的addDepartment()需要迭代子级列表,并将每个子级的类与正在添加的对象的类进行比较。 伪代码:

Class addClass = itemToAdd.getClass();
for each child
{
    if (child.getClass() == addClass)
    {
        //class is already in the list so replace it.
    }
addDepartment()需要遍历子对象列表,并将每个子对象的类与要添加的对象的类进行比较。 伪代码:

Class addClass = itemToAdd.getClass();
for each child
{
    if (child.getClass() == addClass)
    {
        //class is already in the list so replace it.
    }

如果使用
SalesDepartment
调用
addDepartment
一次,然后使用
Something extensed SalesDepartment
再次调用
会发生什么情况?要将前者替换为后者,还是将两者都保留?使用
集合
?(例如,
LinkedHashSet
)@khachik说,在目前情况下,没有任何东西会超出其实施范围,这是无效的。但是,如果扩展SalesDepartment更容易,那么它仍然是SalesDepartment,因此替换它。如果不是这样,那么您可以维护
类->实例的映射,并按其类添加部门。如果要支持层次结构,则需要获取层次结构中
部门
下面的顶级父类,并将其用作键。@ElliottFrisch,但集合无法区分具有不同构造函数参数的相同实例。它将保留所有SalesDepartment 2,因为ID不同。如果使用
SalesDepartment
调用
addDepartment
一次,然后使用
Something extensed SalesDepartment
再次调用
会发生什么?要将前者替换为后者,还是将两者都保留?使用
集合
?(例如,
LinkedHashSet
)@khachik说,在目前情况下,没有任何东西会超出其实施范围,这是无效的。但是,如果扩展SalesDepartment更容易,那么它仍然是SalesDepartment,因此替换它。如果不是这样,那么您可以维护
类->实例的映射,并按其类添加部门。如果要支持层次结构,则需要获取层次结构中
部门
下面的顶级父类,并将其用作键。@ElliottFrisch,但集合无法区分具有不同构造函数参数的相同实例。由于id不同,它将保留所有salesDepartment2
Class addClass = itemToAdd.getClass();
for each child
{
    if (child.getClass() == addClass)
    {
        //class is already in the list so replace it.
    }