1

根据 Android 文档,ContextWrapper是一个“[p]roxying 实现,Context它简单地将所有调用委托给另一个Context. 可以子类化以修改行为而不更改原始Context.”

我对代理模式没有太多经验。它在这里如何使用以及用于什么目的?换句话说,为什么它的间接子类(例如ActivityService)不直接子类化呢?

4

1 回答 1

2

能够覆盖它的一些行为。例如,您将拥有应用程序的基本 Context,然后将其放入 ContextWrapper 并覆盖 Resource 对象以对其进行主题化(这是 Android 实际所做的)。

至于你为什么要这样做而不仅仅是子类 - 以便不必制作两个可能非常重量级的对象。您也可以在两者之间共享变量,但这会增加内存泄漏的可能性。对象的创建也可能很昂贵,但如果它已经完成,您可以通过代理来避免这种情况。

于 2019-03-23T21:17:31.827 回答