如果我们采用HashMap map = new HashMap()这种方式,那么map的一切属性和方法就全部依靠HashMap类的具体实现了。如果有一天,HashMap类无法满足我们的需求,我们只能重新设计另外一个类来替换HashMap类,比如AdvancedHashMap类。可以想象,这种面向具体类的编程,会被无限变化的需求折腾的永无止境。
那么我们换个思路来考虑,采用Map map = new HashMap(),这么做的前提是有一个接口Map。我们会将尽可能多的需求抽象封装到Map接口中,即使有一天HashMap不行了,我们还可以另外实现一个AdvancedHashMap类来代替这里的HashMap()类。
如果我们采用HashMap map = new HashMap()这种方式,那么map的一切属性和方法就全部依靠HashMap类的具体实现了。如果有一天,HashMap类无法满足我们的需求,我们只能重新设计另外一个类来替换HashMap类,比如AdvancedHashMap类。可以想象,这种面向具体类的编程,会被无限变化的需求折腾的永无止境。
那么我们换个思路来考虑,采用Map map = new HashMap(),这么做的前提是有一个接口Map。我们会将尽可能多的需求抽象封装到Map接口中,即使有一天HashMap不行了,我们还可以另外实现一个AdvancedHashMap类来代替这里的HashMap()类。
如果我们采用HashMap map = new HashMap()这种方式,那么map的一切属性和方法就全部依靠HashMap类的具体实现了。如果有一天,HashMap类无法满足我们的需求,我们只能重新设计另外一个类来替换HashMap类,比如AdvancedHashMap类。可以想象,这种面向具体类的编程,会被无限变化的需求折腾的永无止境。
那么我们换个思路来考虑,采用Map map = new HashMap(),这么做的前提是有一个接口Map。我们会将尽可能多的需求抽象封装到Map接口中,即使有一天HashMap不行了,我们还可以另外实现一个AdvancedHashMap类来代替这里的HashMap()类。
如果我们采用HashMap map = new HashMap()这种方式,那么map的一切属性和方法就全部依靠HashMap类的具体实现了。如果有一天,HashMap类无法满足我们的需求,我们只能重新设计另外一个类来替换HashMap类,比如AdvancedHashMap类。可以想象,这种面向具体类的编程,会被无限变化的需求折腾的永无止境。
那么我们换个思路来考虑,采用Map map = new HashMap(),这么做的前提是有一个接口Map。我们会将尽可能多的需求抽象封装到Map接口中,即使有一天HashMap不行了,我们还可以另外实现一个AdvancedHashMap类来代替这里的HashMap()类。
如果我们采用HashMap map = new HashMap()这种方式,那么map的一切属性和方法就全部依靠HashMap类的具体实现了。如果有一天,HashMap类无法满足我们的需求,我们只能重新设计另外一个类来替换HashMap类,比如AdvancedHashMap类。可以想象,这种面向具体类的编程,会被无限变化的需求折腾的永无止境。
那么我们换个思路来考虑,采用Map map = new HashMap(),这么做的前提是有一个接口Map。我们会将尽可能多的需求抽象封装到Map接口中,即使有一天HashMap不行了,我们还可以另外实现一个AdvancedHashMap类来代替这里的HashMap()类。