6。接口和虚拟类
其实最早接触虚拟类或者接口。我一直觉得相当的麻烦。特别是那些UI的监听的接口。不过那些接口,忘的都差不多了。所以举例子也举不出好的。反正当初看到为了监听一个事件。写一个类,继承其接口,只写其中一个方法,然后其他都放空。看起来心里就觉得毛毛的。很不舒服。
但是写多了。特别是最近,自己在写一个淘宝的小应用,需要自己来整理很多业务逻辑。渐渐的,发觉接口的作用,其实不在于编程(以前听说接口的作用在于安全,但是说句实话,我想不通),而在于清晰的逻辑。至少我现在的认识是,接口是需求和实现的分离。
这说的有点抽象,因为如果一个程序从头到尾的都是你来写的时候,是很难把需求和实现分开的。起初我就是这样。打个比方来说,如果过年,某某家里美酒了,让你去买酒。这是需求。但是作为一个实现这个需求的你,你需要考虑很多东西。比如说去哪里买,带多少钱……如此总总,简单的事情是很难分清的。如果复杂一点,比方说要你准备一桌年夜饭。这是一个总需求,然后细分到每道菜,每道菜都是一个小需求。而做每道菜,这也许是一个个实现。但是搅在一起时,如果不去刻意的划清界限,真的很难分清什么是需求,什么是实现了。
而接口的作用正好是在这里,因为接口只能提供需求的描述,你一般不会在接口当中写实现方法。从内部来看,接口和类,没什么区别。但是从外部来看,有了接口,就可以把你的程序看成是一个黑盒。接口只是提供一张单子,单子上面写上一些这个盒子能给你提供的哪些功能。
5。关于封装的一点想法。
query(uri, projection, selection, selectionArgs, sortOrder) 这是一句android中的sql查询接口。我在使用中,需要把这句封装起来。提供一些我需要的Dao方法给外部调用。
起初,我把这些封的很干净,大抵只是getXX()这种(XX)是我内部自己的类。然后接触底层都是private共用方法。用起来之后觉得很麻烦。怎么说呢,几个Private方法很累赘。同时呢,几个get方法,里面也有很多重复的代码,比如说关闭Cursor,每添加一个简单的get方法,都需要写很多,。觉得很不舒服。后来我就直接提供个listXX(uri, projection, selection, selectionArgs, sortOrder)这个方法,这个方法就做两件事情,抽取Cursor,然后组装成自己的类,然后其他get方法都是调用这个方法。就简单很多。
后来想想,其实共用的api。封装的已经算是简洁了。至少比我这种初级程序员的封装要好的多。何必自做聪明的继续把其封装起来呢?其实我有时候,所能做的,只是提供一些常用的方法而已。
1.后台数据和前台交互的数据,尽量的使用Josn。
今天碰到了一个问题。前台用Jqgrid展示数据。后台生成的是XML格式的数据。结果碰到一个很麻烦的事情,特殊符号“&”。其实这个符号挺常用。但是这在xml中,这是一个特殊的字符。能够转义用<![CDATA[]]>,不知道为什么IE总是不认。但是发觉jqgrid中,不会把其转回来。最后的处理结果很讨巧。把&转成了“and”。
这是一个很狼狈的举措。相对于json来说,xml要有很多限制。但是我一直觉得xml很漂亮,json太简陋,经过这次的经验之后,觉得,凡事还是挑选简单的方式比较好。
2.LinkedList。
只是对Api了解一下。知道了peek和poll有Last,first之分。其实很早就知道有这个区别。但是不知道这个区别具体在哪里。这样Linkedlist可以模拟栈和队列了。
3。在进行大规模的字符串拼接的时候,应该使用StringBuffer或者StringBuilder。效率会高很多。前者是线程安全的。
4。接口心得:其实以前都很不喜欢用接口。但是最近发觉,用接口,能够很好的起到解耦的作用。比方说对象A,有两个属性a,b。如果我另一个类只要用到a,那么写个接口。让其设计a就ok了。好处就是,下一次再如果要有类B。那么也可以用在这里。