我有一堂课
public class Foo{
public Foo{...}
private void someFunction(){...}
...
private Acessor{
new Acessor
}
}
具有一些私有功能(someFunction)。但是,有时,我想允许另一个类调用 Foo.SomeFunction,所以我有一个内部类访问 Foo 并传递:
public class Foo{
public Foo{...}
private void someFunction(){...}
...
public Acessor{
Foo _myFoo;
new Acessor(Foo foo){_myFoo = foo;}
public void someFunction(){
_myFoo.someFunction();
}
}
}
使用这段代码,如果我想让 Foo 允许其他人调用 someFunction,Foo 可以传递一个新的 Foo.Accessor(this)。
不幸的是,这段代码允许任何人创建一个由 Foo 启动的 Foo.Accessor,并且他们可以访问 someFunction!我们不希望那样。但是,如果我们将 Foo.Accessor 设为私有,那么我们就不能将它从 Foo 中传递出去。
我现在的解决方案是让 Acessor 成为一个私有类,并让它实现一个公共接口 IFooAccessor;然后,我将 Foo.Accessor 作为 IFooAccessor 传递出去。这可行,但这意味着我必须声明 Foo.Accessor 在 IFooAccessor 中使用额外时间的每个方法。因此,如果我想重构这个方法的签名(例如,让 someFunction 带一个参数),我需要在三个地方引入更改。我不得不这样做好几次,它开始真正困扰我。有没有更好的办法?