如何以一种好的方式向给定的数据结构添加新方法?

时间:2012-12-30 05:18:05

标签: java polymorphism

让我们说,我们有一个具有树数据结构的给定外部库。示例:超类S,子类为B1B5。子类也可以有子类。

现在我想为这个数据结构添加一个额外的方法。通常,人们可以通过使用多态来实现它:每个子流实现特定的方法。

但是因为我们处理外部库,所以我们无法更改原始类。我脑子里有两种替代解决方案:

  1. 使用一种方法创建一个新类,该方法使用instanceof
  2. 检查案例
  3. 为每个类创建子类并实现其中的方法。
  4. 哪种方法是常见的情况?或者,是否有更好的替代解决方案?

3 个答案:

答案 0 :(得分:3)

Decorator Design Pattern可能有所帮助。您可以拥有一个从类S扩展的装饰器类。它也包裹S。您可以在装饰器中实现您的方法。

答案 1 :(得分:1)

Visitor Design Pattern使您能够向现有数据结构“添加”新操作。

答案 2 :(得分:1)

装饰者模式可能派上用场

    class S2 extends S {
        S s;

        S2(S s) {
            this.s = s;
        }

         // delegate method calls to wrapped B1-B5 instance

        @Override
        void oldMethod1() {
            s.oldMethod1();
        }

...

         // add new methods
        void newMetod1() {
             ...
        }
    }

然后将其用作

new S2(new B1()); 

或现有的B1实例

new S2(b1);