由于实际业务描述起来更麻烦点,所以我就举个栗子吧。
我有一个机器人类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 里添加项目引用的时候提示出错了)
所以来问问大佬们,怎么实现根据不同需求,创建不同类型的实例,或者说,还能改成什么样的设计?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.