由于实际业务描述起来更麻烦点,所以我就举个栗子吧。
我有一个机器人类Robot 然后这个机器人可以扫地DoClean(),所以要给它一把笤帚UsedTool.
然后我就定义了一个笤帚ITool的接口,只要继承并实现了接口里方法的类,就可以给Robot用来扫地,到此为止,应该是可以应对大多数情况了,应该算是一个比较正常的逻辑了,是吧?
然后我就遇到了一个问题,出现了一个新型笤帚SuperCleanTool,它虽然勉强实现了ITool接口,但是现在的Robot.DoClean() 是达不到效果的(可能是笤帚太重了挥不动?这样的意外情况)。
所以我就想,是不是要搞一个Robot的子类——RobotPro : Robot,在这个子类里重写一下DoClean()方法,这样的话,如果给我一把这个新型笤帚,我就new RobotPro();让它去扫地。
但是!我该怎么让调用 /实例化 Robot的类知道什么时候该实例化出一个Robot什么时候该实例化出一个RobotPro呢?
本来是想先判断一下ITool 对象是不是SuperCleanTool的:
if(UsedTool is SuperCleanTool tool)
{
new RobotPro()
{
UsedTool = tool;
}
}
但是显然是不行的,因为我的Robot & ITool都是在一个项目里的,而SuperCleanTool 是在另外的项目里,所以SuperCleanTool要实现ITool接口就要先添加Robot所在项目的引用,要在Robot的代码里这样判断,是没办法回过头去引用SuperCleanTool项目的(反正我是在 VS 里添加项目引用的时候提示出错了)
所以来问问大佬们,怎么实现根据不同需求,创建不同类型的实例,或者说,还能改成什么样的设计?