クラスと型でこのような問題を解決するにはどうすればよいでしょうか?ここ は、私はこのインタフェースは、具体的な実装についてのアイデアを持っていないライブラリの内部で使用されているすべてのもの仮想メソッドを使用したクラスの設計
class IWindow
{
public:
virtual void Refresh() = 0;
// another 100 virtual methods
// ...
};
ため
ベースのインタフェースを持っているものです。ここで
は今、私たちはいくつかの追加のメソッドを追加し、また、そのライブラリの内部で使用される別のインタフェースを持っている具体的な実装class ConcreteWindow : public IWindow
{
public:
void Refresh() override {}
/// the other 100 overridden methods
};
のバージョンです。
class IDBDetail : public IWindow
{
public:
virtual void DoDetail() = 0;
};
とここでの主な問題であり、私たちはもちろんのこと
class IGDBDetailWrapper : public IDBDetail, public ConcreteWindow
{
public :
void DoDetail() {}
};
ための具体的なinmplementationを作成するとき、それはそれらの100個のメソッドを実装していないので、具体的なクラスIGDBDetailWrapper
が同様に抽象的ですが、私はそれをやりたいとは思わないが、実装をConcreteWindow
から再利用したいのですが、それらはすべて同じウィンドウハンドルで作業していますが、これはもちろんコンパイルされません。
IGDBDetailWrapper
に
ConcreteWindow
からそれらの100個のメソッドをコピー/ペーストすることができますが、私は別の10のなど新しいインターフェースや具体的な実装を持っているかもしれない原因それは、やり過ぎだ
。
質問を解決し、これらの100のメソッドを何度も何度も何度もやり直すのに役立つ他のパターンはここで使用できますか?
Thxを
からあなたの101抽象メソッドの実装を使用しますそれは間違っている。純粋なインターフェイスは、それがいくつかの機能以上のものを持っている場合、かなり退屈になります。しかし、悪化すると、デバッグが非常に難しくなります。ただしないで、 "ウィンドウ"は実用的なベースクラスを必要とします。他の人がどのようにこれを行い、GUIラッパーライブラリがたくさんあるかを見てください。 –
なぜConcreteWindowから継承しないのですか? –
基本クラスの100個のメソッドがひどく、 'IDBDetail'と' IWindow'の間の継承関係が間違っているので、ライブラリの設計が悪いだけです。あなたはきれいな解決策を見つけることはできません。このライブラリの任意のクライアントは、1つの回避策または他の回避策を使用する必要があります。 –