我想以优雅的方式解决我的问题,而不是将我的其他类的所有方法写入主组件类(超过100个方法)
所以,在简化版本中,我有统一组件类:
public class MyAnimator : MonoBehaviour
{
AnimatorHandler handler;
public AnimatorHandler Handler => handler;
}
以及 AnimatorHandler 类,例如:
public class AnimatorHandler
{
public void DoOperation1() { }
public void DoOperation2() { }
... and a lot of more public operations
}
我想让用户通过访问 MyAnimator 类来访问处理程序类的所有 DoOperation1() DoOperation2() 方法。 喜欢:
void MyUpdate(MyAnimator animator)
{
animator.DoOperation1();
}
而不是
void MyUpdate( MyAnimator animator )
{
animator.Handler.DoOperation1();
}
或者将所有 AnimatorHandler 方法写入 MyAnimator,这样就不会像:
public void DoOperation1() => handler.DoOperation1();
在这种情况下,我最终会得到额外的 .cs 文件,其中包含大约 1000 行代码,并且每次在 MyAnimator 类中更改某些内容时都需要更新它。
对于这种情况有可能的智能解决方案吗?
也许在获取引用时返回处理程序而不是 MyAnimator 实例?
谢谢你。
处理您的情况的一个好方法是使用代理模式。在此模式中,您创建一个代理类,充当中介并直接访问 AnimatorHandler 类的方法。这样,您不需要直接在 MyAnimator 类中复制 AnimatorHandler 的所有方法,而是通过代理访问它们。
这是一个如何实现这一点的简单示例:
public class MyAnimator : MonoBehaviour
{
private AnimatorHandler handler = new AnimatorHandler();
public AnimatorHandler Handler => handler;
}
public class AnimatorHandler
{
public void DoOperation1() { }
public void DoOperation2() { }
// Add other methods
}
public class MyAnimatorProxy
{
private MyAnimator myAnimator;
public MyAnimatorProxy(MyAnimator animator)
{
this.myAnimator = animator;
}
public void DoOperation1()
{
myAnimator.Handler.DoOperation1();
}
public void DoOperation2()
{
myAnimator.Handler.DoOperation2();
}
// Add other proxy methods
}
// Using the proxy in code
void MyUpdate(MyAnimatorProxy animatorProxy)
{
animatorProxy.DoOperation1();
}
这种方法创建了一个抽象层,使代码结构保持干净且易于管理,避免了直接从 AnimatorHandler 访问方法的复杂性。