模式定义
装饰器模式允许向一个现有对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到自己的目的。
做一个有追求的青年
本文链接:https://rainmonth.github.io/posts/J180324.html
模式定义
责任链模式,行为模式的一种,一个请求有多个对象处理,这些对象可以看成一条链,具体由哪个对象处理,有判断条件来决定,如果当前对象不能处理,则交给下一个对象处理,知道有对象处理为止。OkHttpClient就是利用责任链模式进行拦截器的处理的。
将请求和处理分离开来,进行解耦。
Java 集合可以分为Collection
和Map
两种体系,两种体系的类关系图如下:
Collection
体系:
Map
体系:
Collection
接口:单列数据,定义了存取一组对象方法的集合;List
,元素有序,可重复的集合;Set
,元素无序,不可重复的集合;Queue
,Collection和Map虽都是与集合处理有关的接口,但二者之间并没有直接联系。
Collection是集合类的根接口,java中无该接口的直接实现类。但有两个接口继承于Collection,分别是Set
和List
。
Collection接口的部分实现
Set 不能包含重复的元素,无序(TreeSet是二叉排序树)。
有序的Set,其中E必须实现 Comparable
接口(或者被指定的比较器所接受),所有这些元素都必须是可互相比较的。
提供了Set接口的部分实现。
此实现不是同步的,即不是线程安全的,要得到同步的HashSet,方法如下:
1 | Set s = Collections.synchronizedSet(new HashSet()); |
此实现不是同步的,即不是线程安全的,要得到同步的TreeSet,方法如下:
1 | Set s = Collections.synchronizedSortedSet(new TreeSet()); |
List是一个有序的集合,可以包含重复元素,且可以通过索引方式来访问。
List接口的部分实现。
AbstractList
1 | public abstract ListIterator<E> listIterator(int index); |
也就是说实现该类只要实现listIterator(int index)
方法即可,它的其他方法实现上都依赖于上面这个方法。
LinkedList是它的具体实现。
List
接口的大小可变数组的实现。(大致功能等同于Vector类,但要注意,此实现不是同步的,即不是线程安全的),默认列表长度为10。
它是同步的,即线程安全的可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector
的大小可以根据需要增大或缩小,以适应创建 Vector
后进行添加或移除项的操作。
List
接口的链接列表实现。注意,此实现不是同步的,即不是线程安全的
队列,在处理元素前用于保存元素的集合,通常一FIFO(先进先出)的方式排序各个元素(优先级队列和LIFO队列除外)。
每个队列的实现必须指定其顺序属性。
支持两个附加操作的队列,即put(E e)(存储元素时等待队列空间变得可用)和take()(获取元素时等待队列变为非空)。
BlockingQueue的实现是线程安全的。
一个线性集合,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque
实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
支持两个附加操作的 Queue
,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。对应的方法分别是:
1 | // 头部 |
BlockingDeque的实现是线程安全的。
Map中包含了K-V对,不能包含重复的key,但可以包含相同的value,无序(TreeMap是二叉排序树)。Map
接口提供三种集合视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容,对应的方法分别是:
1 | // 映射关系集合 |
表示K和V之间的映射关系。获得映射关系对象引用的唯一方法是通过Set
进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet、keySet 和 values 方法返回)进行迭代时,此顺序就会反映出来。
内容比较多,看来一个晚上写不完,未完待续。。。。。。
Iterator表示对Collection进行迭代的迭代器,功能比之前使用的Enumeration更加完善,取代了Enumeration,与其不同的地方有以下两点: