我不断遇到代码,人们实例化一个新的ArrayList并将其分配给List接口,如下所示:
List<String> names = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
这种方法背后的原因是什么?
JHS*_*JHS 18
将代码与接口的特定实现分离.
这也有助于您List将来转移到界面的另一个实现.
例如 -
你List<String> names = new ArrayList<String>();以后你决定,你应该使用一些其他的实现的List接口,说LinkedList所以你只能将其更改为List<String> names = new LinkedList<String>();并没有什么休息时间.
对接口编程,而不是实现
这是四人帮 (GoF) 的设计模式。这是为什么?
您通过抽象契约而不是具体实现进行指导。
public class MyClass {
private List myList ;
public setMyList(List list){
myList=list;
}
}
Run Code Online (Sandbox Code Playgroud)
ArrayList您想要实施而不是实施怎么样LinkedList?这样你只需要用 setter 注入该属性。
抽象是关键,你对实现一无所知,只能通过规范来指导。
阅读本文接口编程是什么意思?