Android的 - 在活动无法应用装饰模式?(Android - Can't Apply

2019-11-01 07:31发布

我希望能够动态地构建有几个 ,我们有能力的活动(例如防止滚动,监测互联网连接,防止取向变化等)。

我们不希望有创建一个抽象BaseActivity包含所有功能的所有可能的属性和抽象方法。 我们将在子类有很多空的函数实现的BaseActivity谁只需要实际执行数的那些功能。 更糟糕的是,如果我们想别的能力(另一套性能和功能添加到BaseActivity ),我们将不得不修改的每一个孩子BaseActivity执行新的抽象函数(最有可能会是空的)。

的另一种方法BaseActivity继承是创建实现只有少数的,我们有能力的子类。 但是,这需要我们创建一个子类的能力每个组合,这甚至很少的功能太多了。 此外,这将导致大量重复的代码将实现同样的功能2+子类。

所以,我想实现Decorator模式,但我不认为我们永远实际上实例化一个新的活动。 我们总是创造一个Intent ,并指定SomeActivity.class在其构造,则称startActivity(new Intent(getApplicationContext(), SomeActivity.class));

有没有办法拦截活动的实际实例,执行它的装饰模式操作,然后让OS /应用程序把它放在堆栈的顶部?

如果没有,还有什么其他的办法是可行的?

Answer 1:

我们不希望有创建一个包含所有功能的所有可能的属性和抽象方法的抽象BaseActivity。

您可以通过删除关键字做到这一点abstract 。 这需要每个关键字大约8个按键。

有没有办法拦截活动的实际实例,执行它的装饰模式操作,然后让OS /应用程序把它放在堆栈的顶部?

只有通过派生的Android。

如果没有,还有什么其他的办法是可行的?

创建一个非抽象BaseActivity说,“包含所有可能的属性”,“对所有功能的方法”和非抽象。 覆盖需要在子类中的方法。 它是有道理的,有子类链超类,所以超可以有默认行为的子类可以增加。

你可以看到这个Activity本身。 您没有实现onCreate() onStart() onResume() onPause() onStop() onDestroy() onSaveInstanceState() onRestoreInstanceState()以及许多其他方法。 这些方法不是抽象的,默认的实现是合理的(与典型的例外onCreate() 子类可以覆盖那些期望添加功能的方法,或在某些情况下替换现有的功能(例如, onSaveInstanceState()可以链的超类或没有如希望的话)。



Answer 2:

我觉得这篇文章可以帮助你。 装饰的活动



文章来源: Android - Can't Apply Decorator Pattern on Activities?