我有一个朋友,在用Java语言开发了很长时间之后,他刚刚进入.NET开发领域,在看了他的一些代码后,我注意到他经常做以下事情:
IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();他将字典声明为接口,而不是类。通常,我会执行以下操作:
Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();我只在需要时使用IDictionary接口(例如,将字典传递给接受IDictionary接口的方法)。
我的问题是,他的做法有什么可取之处吗?这在Java中是常见的做法吗?
发布于 2009-10-20 23:35:06
如果IDictionary是一种比字典“更通用”的类型,那么在声明变量时使用更通用的类型是有意义的。通过这种方式,您不必关心分配给变量的实现类,并且将来可以轻松地更改类型,而不必更改大量以下代码。例如,在Java中,通常认为这样做更好
List<Integer> intList=new LinkedList<Integer>();比它要做的更多
LinkedList<Integer> intList=new LinkedList<Integer>();这样,我确信下面的所有代码都将List视为list,而不是LinkedList,这样将来就可以很容易地为Vector类或任何其他实现List的类切换LinkedList。我要说的是,这对于Java和一般的好的编程来说是很常见的。
发布于 2009-10-20 15:36:25
这种做法并不局限于Java。
当您想要将对象的实例从您正在使用的类中分离出来时,也经常在.NET中使用它。如果您使用的是接口而不是类,则可以在需要时随时更改支持类型,而不会破坏其余代码。
您还将看到大量使用工厂模式处理IoC容器和实例化的实践。
发布于 2009-10-20 23:38:24
你的朋友正在遵循一个非常有用的原则:
“将自己从实现细节中抽象出来”
https://stackoverflow.com/questions/1595498
复制相似问题