Android - 无法在活动上应用装饰器模式?

时间:2012-12-12 17:10:06

标签: android android-intent android-activity decorator solid-principles

我希望能够动态构建一个具有少量 功能的Activity(例如阻止滚动,监控互联网连接,防止方向更改等)。< / p>

我们不希望创建一个包含所有功能的所有可能属性和抽象方法的抽象BaseActivity。我们在BaseActivity的子类中有很多空函数实现,他们只需要实际实现其中的一些函数。更糟糕的是,如果我们想到另一个功能(要添加到BaseActivity的另一组属性和函数),我们必须编辑BaseActivity的每个子项来实现新的抽象函数(最有可能是空的。

BaseActivity继承的另一种方法是创建仅实现我们拥有的一些功能的子类。但是这将要求我们为每种功能组合创建一个子类,即使功能很少也是如此。另外,这将导致大量重复的代码用于2 + 2个子类,这些子类将实现相同的功能。

所以,我想过实现Decorator模式,但我认为我们实际上并没有实例化一个新的活动。我们始终在其构造函数中创建Intent并指定SomeActivity.class,然后我们调用startActivity(new Intent(getApplicationContext(), SomeActivity.class));

有没有办法拦截Activity的实际实例化,对它执行Decorator Pattern操作,然后让OS / Application将它放在堆栈顶部?

如果没有,还有哪些方法可行?

2 个答案:

答案 0 :(得分:1)

  

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

您可以通过删除关键字abstract来完成此操作。每个关键字大约需要八次击键。

  

有没有办法拦截Activity的实际实例化,对它执行Decorator Pattern操作,然后让OS / Application将它放在堆栈顶部?

只能通过分叉Android。

  

如果没有,还有哪些方法可行?

创建一个非抽象的BaseActivity“包含所有可能的属性”和非抽象的“所有功能的方法”。根据需要在子类中重写方法。在有意义的地方,让子类链到超类,因此超类可以具有子类可以扩充的默认行为。

您可以在Activity本身中看到这一点。您无需实施onCreate()onStart()onResume()onPause()onStop()onDestroy()onSaveInstanceState(),{{ 1}}和许多其他方法。这些方法不是抽象的,默认实现是合理的(onRestoreInstanceState()的典型例外)。子类可以覆盖那些需要添加功能的方法,或者在某些情况下替换现有功能(例如,onCreate()可以根据需要链接到超类)。

答案 1 :(得分:0)

我认为这篇文章可以帮到你。 Decorator for activities