对象是否有办法知道它是否包含在另一个对象中?

时间:2012-07-29 14:37:38

标签: java composition

我的具体问题是我有一个包含另一个类B的A类.B包含一些数字,A包含这些数字的总和。我喜欢做的是当B中的数字发生变化时,它应该让A类知道它更新了它的数字,以便A更新它自己的数字。

举个例子,假设B包含:

number1 = 7; number2 = 5;

所以A包含12个。

现在当我将7改为9时,A应该包含14。

最佳做法是什么?

PS:它不仅仅是关于A包含B,实际上我有D包含C,C包含A而A包含B.

2 个答案:

答案 0 :(得分:4)

以下是两种选择:

  • 请勿将总数存储在A中,并按需计算。

    class A {
        B b;
    
        ...
    
        public int getTotal() {
            return b.getNumber1() + b.getNumber2();
        }
    }
    
  • 或者,让A成为观察者,并聆听B中的更改。

    class A implements ChangeListener {
        B b;
        int total = 0;
    
        public A() {
            b = new B();
            b.addChangeListener(this);
        }
    
        @Override
        public void stateChanged(ChangeEvent ce) {
            // recompute total
        }
    }
    

    这种方法通常被称为observer pattern

答案 1 :(得分:1)

1。使用Publisher-Subscriber模式,通常,称为Observer Pattern

2. 也可以通过创建一个轮询变量值的线程来完成,所做的任何更改都将按照您规定的方式处理。