假设我有两个完全不同功能的基础抽象类:Laptop和Smartphone。在当前项目中,我已经有了许多笔记本电脑和智能手机的实现,并且它们始终是完全不同的。
但突然间,我收到了一个请求,要添加一个同时具有智能手机和笔记本电脑功能的PC平板类的实现。现在改变基础类太晚了,而且我非常确定这个PC平板只会出现一次。
问题是,我应该能够将我的PC平板放入智能手机的容器中,但它也应该是笔记本电脑,因为它继承了相应的功能(实际上,在项目的某些部分中,PC平板仅用作笔记本电脑,并且不需要智能手机功能。此外,对于该特定部分的项目来说,将PC平板视为智能手机是不好的)。因此,我创建了PcTabletAsLaptop:Laptop类,它实际上是一个笔记本电脑,而不是智能手机。
我的解决方案是添加一个包装器:
但突然间,我收到了一个请求,要添加一个同时具有智能手机和笔记本电脑功能的PC平板类的实现。现在改变基础类太晚了,而且我非常确定这个PC平板只会出现一次。
问题是,我应该能够将我的PC平板放入智能手机的容器中,但它也应该是笔记本电脑,因为它继承了相应的功能(实际上,在项目的某些部分中,PC平板仅用作笔记本电脑,并且不需要智能手机功能。此外,对于该特定部分的项目来说,将PC平板视为智能手机是不好的)。因此,我创建了PcTabletAsLaptop:Laptop类,它实际上是一个笔记本电脑,而不是智能手机。
我的解决方案是添加一个包装器:
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自动生成。
这个解决方案看起来很复杂。我的问题是它是否好用,或者有更简单的方法吗?