2

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

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

但是因为我们处理的是一个外部库,所以我们不能改变原来的类。我想到了两种替代解决方案:

  1. 使用一个方法创建一个新类,该方法通过使用检查大小写instanceof
  2. 为每个类创建子类并在那里实现方法。

哪种方法是常见的情况?或者,是否有更好的替代解决方案?

4

3 回答 3

3

装饰器设计模式可能会有所帮助。您可以拥有一个从 Class 扩展的装饰器类S。它也包裹了一个S。您可以在装饰器中实现您的方法。

于 2012-12-30T05:49:32.557 回答
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); 
于 2012-12-30T05:50:18.163 回答
1

访问者设计模式使您能够向现有数据结构“添加”新操作。

于 2012-12-30T05:20:34.920 回答