ラップトップとスマートフォンという、まったく異なる機能を持つ2つの基本的な抽象クラスがあるとします。(機能が完全に異なると仮定します)。そして、私の現在のプロジェクトでは、すでにラップトップとスマートフォンの多くの実装があり、それらは常に完全に異なっていました。
しかし、突然、pc-tabletの実装であるクラスを追加するように要求されました。これは、実際にはスマートフォンとラップトップの両方の機能を備えています。基本クラスを変更するには遅すぎます。実際、このPCタブレットは1回だけ表示されると確信しています。
問題は、スマートフォン用のコナイナーにPCタブレットを含めることができるはずですが、継承された機能のためにラップトップでもある必要があります(実際には、プロジェクトの一部では、PCタブレットは次のようにのみ使用されますラップトップであり、スマートフォンの機能は必要ありません。さらに、プロジェクトの特定の部分でスマートフォンとしてpc-tabletを見るのは悪いことです)。だから私はPcTabletAsLaptopを持っています:ラップトップクラス、それは実際にはラップトップであり、スマートフォンではありません。
私の解決策は、ラッパーを追加することです。
class PcTablet : SmartPhone
{
private PcTabletAsLaptop _pcTablet;
// Here goes all the methods of PcTabletAsLaptop as proxies:
public void Call(int number)
{
_pcTablet.Call(number);
}
// .....
}
200以上のメソッドがあり、それらをPcTabletAsLaptopから自動的に生成したいと思います。
このソリューションは非常に複雑に見えます。私の質問はそれが良いことですか、それともそれを行うためのより簡単な方法がいくつかありますか?