此外,当您认为可能需要更改正在使用的 list 的实现时,可以使用该构造。假设您使用的是数组列表的构造,并且您的问题不是线程安全的。现在,您希望使它成为线程安全的,并且对于您的解决方案的一部分,您更改为使用 Vector,例如。至于该列表的其他用途,不管它是 AraryList 还是 Vector,只要是 List 就行,不需要做任何新的修改。
例如,假设您正在编写一个相当大的第三方库,并假设您决定使用 LinkedList实现库的核心。如果您的库严重依赖于访问这些列表中的元素,那么最终您会发现您做出了一个糟糕的设计决策; 您将意识到您应该使用 ArrayList(给予 O (1)访问时间)而不是 LinkedList(给予 O (n)访问时间)。假设您已经编写了一个接口,那么进行这样的更改是很容易的。您只需将 List的实例从,
List list = new LinkedList();
到
List list = new ArrayList();
并且您知道这将工作,因为您已经编写了遵循 List接口提供的契约的代码。
另一方面,如果您已经使用 LinkedList list = new LinkedList()实现了库的核心,那么进行这样的更改将不会那么容易,因为不能保证您的其余代码不会使用特定于 LinkedList类的方法。