在阅读ArrayList的源码过程中,List接口,AbstractList抽象类和ArrayList集合类之间到底什么关系,这是一种什么设计模式?
在源码中这样的设计并不罕见,首先在接口中定义这个家族中所有成员的共性方法,且不管其成员具体的实现方式,集中地规范了该有的共性方法
例如List接口中的抽象方法
那每个实现类都要全部实现这些方法么?那可太麻烦了,例如size()
方法,对于每个List实现类来说都是返回size属性,如果每个都要重写,势必会使代码更加臃肿
AbstractList中
所以像这类实现方法是通用的,就可以在一个抽象类中统一实现,然后将add()
等自由化程度较高地方法交给每个实现类自己去实现,所以并没有实现接口的所有方法,那么就需要加abstract
关键字修饰
ArrayList中
所以到了具体的实现类继承Abstract类后就不需要重写那些实现方式相同的代码,只需要关注自身具体的实现方法就可以,使方法更加专业化对准每一个个性化集合