假设我有两个具有完全不同功能的基本抽象类:笔记本电脑和智能手机。(假设功能完全不同)。在我目前的项目中,我已经有很多笔记本电脑和智能手机的实现,而且它们总是完全不同的。
但突然我收到一个请求,要添加一个类,它是 pc-tablet 的实现,它实际上具有智能手机和笔记本电脑的功能。改基类已经来不及了,其实我很确定这个pc-tablet只会出现一次。
问题是,我应该能够将我的 pc-tablet 包含在智能手机的容器中,但它也应该是笔记本电脑,因为继承了功能(实际上除此之外,在项目的某些部分中,pc-tablet 仅用作笔记本电脑,它不需要智能手机功能。此外,将 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 自动生成。
这个解决方案看起来相当复杂。我的问题是它很好,或者也许有一些更简单的方法可以做到这一点?