adapter extends LetterHeaderAdapter
LetterHeaderDecoraton extends RecycleView.ItemDecoration(abstract)
letterHeaderDecoration = new LetterHeaderDecoration(adapter)
recycleView.addItemDecoration(letterHeaderDecoration)
- 在LetterHeaderDecoration中也可以完成所有功能,不需要在Adapter中实现接口来绑定数据。这样功能更加独立,LetterHeaderDecoraton包含所有功能,并且没有和Adapter耦合。
- 在Adapter中实现接口,通过实现接口中的方法,绑定数据。根据Adapter中的数据来绑定LetterHeader数据,如果在LetterHeaderDecoration中则需要LetterHeaderDecoration也保存Adapter中的数据。
- 在Adapter中实现接口来绑定LetterHeaderDecoration的数据,是因为数据data都在Adapter中,则Adapter来实现方法和数据绑定更方便。
- LetterHeaderDecoration要实现的功能是得到HeaderView,得到HeaderView显示的数据。计算HeaderView要不要显示。流程式思维是把数据传递过来,自己来计算。或者新建一个计算类作为属性来实现需要的功能。或者让另一个保留数据的类Adapter来计算,然后把Adapter作为属性传递过来。
- 通过把Adapter传递过来作为属性,Adapter的所有功能和属性都传递过来了,有很多不需要的属性和功能。如果用接口来限制功能,通过Adapter实现接口,然后LetterHeaderDecoration持有接口,就可以限制传递的功能。
- 其它页面需要LetterHeaderDecoration时,只需要自己Adapte实现接口,绑定数据即可,而不需要改动LetterHeaderDecoration
1、面向接口编程
2、依赖倒置,依赖接口而不是依赖具体的类。
3、最小依赖原则
4、可扩展,最小改动原则