根据Android文档,ContextWrapper是Context
的一个“px roxying实现,它简单地将所有调用委托给另一个Context
。可以在不改变原始Context
的情况下修改行为的子类。”
我对代理模式没有多少经验。它是如何用于此目的的?换句话说,为什么它的间接子类(例如Activity和Service)不直接将它子类化呢?
能够覆盖它的一些行为。例如,您将拥有应用程序的基本上下文,然后将其放在ContextWrapper中并覆盖Resource对象以对其进行主题化(Android实际上就是这样做)。
至于你为什么这样做而不仅仅是子类 - 以便不必制作两个,可能是非常重量级的对象。您也可以在两者之间共享变量,但这会增加内存泄漏的可能性。它也可能是对象的创建是昂贵的,但如果已经完成,你可以通过代理来避免这种情况。