Java:委托模式和受保护的方法

ZZ *_*der 5 java design-patterns delegation decorator

我一直在使用委托模式将工厂创建的对象包装在第三方库中.最近,库在基类中添加了一个受保护的方法,我的包装器类不再起作用了.没有诉诸反思,有没有人有一个好的解决方案?

这是在第三方库和他们的包中,

public class Base {
    public void foo();

    protected void bar(); // Newly added
}
Run Code Online (Sandbox Code Playgroud)

这是我自己的包,

public class MyWrapper extends Base {
    private Base delegate;

    public MyWrapper(Base delegate) {
        this.delegate = delegate;
    }

    public void foo() {
        delegate.foo()
    }

    protected void bar() {
        // Don't know what to do
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我原来的帖子不清楚.这两个类在不同的包中.

回答我为什么需要代表团的问题.这是委托/包装模式的典型用例,我不能在几行代码中显示它.该库公开Base类,但其工厂中的实际对象是Base的派生类.实际的类根据配置而变化.所以我不知道代表是什么.因此,直接继承模式在这里不起作用.

har*_*rsh 4

Access Levels
Modifier    Class   Package Subclass    World
public      Y          Y        Y         Y
protected   Y          Y        Y         N
no modifier Y          Y        N         N
private     Y          N        N         N
Run Code Online (Sandbox Code Playgroud)

protected也有package访问权限,您是否看到任何具体问题:

class Base {
        public void foo(){};

        protected void bar(){}; // Newly added
    }

    class MyWrapper  {
        private Base delegate;

        public MyWrapper(Base delegate) {
            this.delegate = delegate;
        }

        public void foo() {
            delegate.foo();
        }

        protected void bar() {
            // Don't know what to do
            delegate.bar(); //since its in same package, it can be referenced, do you expect compile time error?
        }
    }
Run Code Online (Sandbox Code Playgroud)

此外,在使用委托模式为什么包装类扩展Base类时,我没有看到具体的需要,因为您已经有一个Base. 对我来说,它更像是一个装饰器。