1

いくつかの機能 (スクロールの防止、インターネット接続の監視、向きの変更の防止など) を持つアクティビティを動的に構築できるようにしたいと考えています。

BaseActivityすべての可能なプロパティとすべての機能の抽象メソッドを含む抽象を作成する必要はありません。BaseActivity実際にそれらの関数のいくつかを実装するだけでよいサブクラスには、多くの空の関数実装があります。さらに悪いことに、別の機能 ( に追加する別のプロパティと関数のセットBaseActivity) を考えた場合、 のすべての子を編集BaseActivityして、新しい抽象関数を実装する必要があります (ほとんどの場合、空になります)。

継承の別のアプローチはBaseActivity、私たちが持っている機能のほんの一部を実装する子クラスを作成することです。しかし、これには、機能の組み合わせごとに子クラスを作成する必要があり、機能が少なくても多すぎます。さらに、これにより、同じ機能を実装する 2 つ以上の子クラスの重複コードが多数発生します。

そこで、Decorator パターンを実装することを考えましたが、実際に新しいアクティビティをインスタンス化することはないと思います。常に を作成し、そのコンストラクターでIntent指定してから呼び出しますSomeActivity.classstartActivity(new Intent(getApplicationContext(), SomeActivity.class));

アクティビティの実際のインスタンス化をインターセプトし、Decorator パターン操作を実行してから、OS/アプリケーションがそれをスタックの一番上に置く方法はありますか?

そうでない場合、他にどのようなアプローチが実行可能ですか?

4

2 に答える 2

1

すべての可能なプロパティとすべての機能の抽象メソッドを含む抽象 BaseActivity を作成する必要はありません。

これは、キーワードを削除することで実現できますabstract。これには、キーワードごとに約 8 回のキーストロークが必要です。

アクティビティの実際のインスタンス化をインターセプトし、Decorator パターン操作を実行してから、OS/アプリケーションがそれをスタックの一番上に置く方法はありますか?

Android をフォークすることによってのみ。

そうでない場合、他にどのようなアプローチが実行可能ですか?

BaseActivity「すべての可能なプロパティを含む」非抽象と非抽象の「すべての機能のメソッド」を作成します。サブクラスで必要に応じてメソッドをオーバーライドします。必要に応じて、サブクラスをスーパークラスに連鎖させて、サブクラスが拡張できるデフォルトの動作をスーパークラスに持たせることができます。

Activityこれ自体を見ることができます。onCreate()onStart()onResume()onPause()onStop()onDestroy()、および他の多くのメソッドonSaveInstanceState()を実装する必要はありません。onRestoreInstanceState()これらのメソッドは抽象的ではなく、デフォルトの実装は合理的です (典型的な例外を除いてonCreate())。サブクラスは、必要に応じてこれらのメソッドをオーバーライドして機能を追加したり、場合によっては既存の機能を置き換えたりすることonSaveInstanceState()ができます (たとえば、必要に応じてスーパークラスにチェーンするかどうかを指定できます)。

于 2012-12-12T18:02:05.683 に答える