あなたが求めているのは、「インターフェイス」クラス階層を反映する実装の 2 番目のクラス階層を作成するにはどうすればよいかということだと思います。これは、インターフェイスと実装の間の結合を減らすために行います。あなたの問題は、実装クラスがインターフェイス クラスを拡張する必要があると考えていることですが、次のように、impl クラスの「自然な」継承階層も拡張する必要があります。
AImpl
^ ^
| |
BImpl CImpl
このパターンを説明する GoF (Gang of Four) Bridge パターンを参照することをお勧めします。実際、本の例はウィキペディアの例よりも優れていますが、オンラインで見つけることができないようです. 大まかな (ASCII) UML は次のとおりです。
Window <>imp----------------------------> WindowImpl
^ ^ ^ ^
| | | |
| TransientWindow | PMWindowImp
IconWindow XWindowImp
上記の例では、実装を参照するWindow
クラスがあります。#imp
したがって、実際の作業を実行するためにIconWindow
実装には#imp
参照がありますが、クライアントはインスタンスを介してのみ参照します。これにより、再コンパイルのオーバーヘッドが削減されます。XWindowIconWindow
IconWindow
重要な点は次のとおりです。
- ウィンドウの種類 (通常のウィンドウ、アイコン ウィンドウ、ダイアログ) とウィンドウの実装 (X-windows、PMWindows) の個別のクラス階層。それらは独立して拡張できます。
- 操作は WindowImp の抽象的な操作の観点から実装されているため、操作はプラットフォームの仕様から抽象化されています。
- 抽象化と複数の実装を混在させようとした場合に発生するクラスの増殖を減らします。
これをあなたの問題に翻訳するのはあなたに任せますが、問題があればコメントしてください。