荏苒追寻个人博客

做一个有追求的青年


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

Java 设计模式09——装饰器模式

发表于 2018-03-26 | 分类于 Java , 设计模式

模式定义

装饰器模式允许向一个现有对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到自己的目的。

阅读全文 »

Java 设计模式——中介者模式

发表于 2018-03-25 | 分类于 Java , 设计模式

模式定义

用一个中介者对象来封装一系列的对象交互。这样就使各个对象之间不需要显示的相互引用,达到降低耦合的目的,并且可以独立的改变它们之间的交互

使用范围

  1. 一组已经定义好的对象以复杂的方式进行通信,产生相互依赖的关系结构且难以理解时;
  2. 一个对象引用很多其他对象,并直接与这些对象通信时;
  3. 想定制一个分布在多个类中的行为,又不想生成太多的子类(如根据某种行为定义一个接口,让想拥有该行为的类实现该接口)
阅读全文 »

Java 设计模式15——责任链模式

发表于 2018-03-24 | 分类于 Java , 设计模式

本文链接:https://rainmonth.github.io/posts/J180324.html

模式定义

责任链模式,行为模式的一种,一个请求有多个对象处理,这些对象可以看成一条链,具体由哪个对象处理,有判断条件来决定,如果当前对象不能处理,则交给下一个对象处理,知道有对象处理为止。OkHttpClient就是利用责任链模式进行拦截器的处理的。

模式特点

将请求和处理分离开来,进行解耦。

阅读全文 »

Java 设计模式04——建造者模式

发表于 2018-03-23 | 分类于 Java , 设计模式

模式简介

创建型模式,将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

模式特点

分工明确,一个抽象建造者,一个指挥者,一个具体的建造者,具体的要被构造的产品。

阅读全文 »

Java 设计模式01——单例模式

发表于 2018-03-22 | 分类于 Java , 设计模式

https://rainmonth.github.io/posts/J180322.html

模式简介

单例模式(Singleton),创建型模式,采用单例模式创建的类,只可能产生一个实例供外部访问,并提供一个全局访问点。

模式特点

  1. 单例类只有一个实例;
  2. 单例类必须自己创建自己的唯一实例;
  3. 单例类必须给所有对象提供自己创建的实例
阅读全文 »

Java 设计模式16——策略模式

发表于 2018-03-21 | 分类于 Java , 设计模式

模式定义

策略模式,行为模式的一种,针对一组算法,将每一个算法封装到具有共同接口(也可能是共同的抽象类)的独立类,从而使它们可以相互替换。

关键词

  • 一组算法,对象的某个属性针对不同操作可能有不同的赋值方式(如下例中图书价格的计算方式因会员等级而异)
  • 共同接口(共同抽象类),不同算法能够相互替换的保障
阅读全文 »

Java集合HashMap

发表于 2018-03-20 | 分类于 Java , 集合

https://rainmonth.github.io/posts/J180320.html

前言

本文分析的代码对应的JDK版本为1.8,采用的IDE环境为IntellJ IDEA,注意本文不做细致分析,所以不会对源码细节做过多说明,而是指出使用HashMap前需要了解哪些方面的内容,可能会发生什么问题,细节可以自己参考JDK源码。

阅读全文 »

Java 集合——简介

发表于 2018-03-19 | 分类于 Java , 集合

https://rainmonth.github.io/posts/J180319.html

集合相关接口

Java 集合可以分为Collection和Map两种体系,两种体系的类关系图如下:

Collection体系:

Collection体系类图

Map体系:

Map体系类图

  • Collection接口:单列数据,定义了存取一组对象方法的集合;
    • 子接口List,元素有序,可重复的集合;
    • 子接口Set,元素无序,不可重复的集合;
    • 子接口Queue,

Collection和Map

Collection和Map虽都是与集合处理有关的接口,但二者之间并没有直接联系。

Collection(接口)

Collection是集合类的根接口,java中无该接口的直接实现类。但有两个接口继承于Collection,分别是Set和List。

AbstractCollection

Collection接口的部分实现

Set(接口)

Set 不能包含重复的元素,无序(TreeSet是二叉排序树)。

SortedSet(接口)

有序的Set,其中E必须实现 Comparable 接口(或者被指定的比较器所接受),所有这些元素都必须是可互相比较的。

AbstractSet(抽象类)

提供了Set接口的部分实现。

HashSet(实现类)

此实现不是同步的,即不是线程安全的,要得到同步的HashSet,方法如下:

1
Set s = Collections.synchronizedSet(new HashSet());
TreeSet(实现类)

此实现不是同步的,即不是线程安全的,要得到同步的TreeSet,方法如下:

1
Set s = Collections.synchronizedSortedSet(new TreeSet());
List

List是一个有序的集合,可以包含重复元素,且可以通过索引方式来访问。

AbstractList

List接口的部分实现。

  • 实现不可修改的列表,只需实现get(int)和size()方法的实现。
  • 实现可修改的列表(列表大小不可变),还要重写set(int, E)方法。
  • 实现可修改的列表(列表大小可变),要重写set(int, E)、add(int, E)和remove(int)。
  • 不必提供迭代器实现
AbstractSequentialList

AbstractList的进一步实现,提供的抽象方法只有一个,如下:

1
public abstract ListIterator<E> listIterator(int index);

也就是说实现该类只要实现listIterator(int index)方法即可,它的其他方法实现上都依赖于上面这个方法。

LinkedList是它的具体实现。

ArrayList(实现类)

List 接口的大小可变数组的实现。(大致功能等同于Vector类,但要注意,此实现不是同步的,即不是线程安全的),默认列表长度为10。

Vector(实现类)

它是同步的,即线程安全的可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

LinkedList(实现类)

List 接口的链接列表实现。注意,此实现不是同步的,即不是线程安全的

Queue(接口)

队列,在处理元素前用于保存元素的集合,通常一FIFO(先进先出)的方式排序各个元素(优先级队列和LIFO队列除外)。

每个队列的实现必须指定其顺序属性。

BlockingQueue

支持两个附加操作的队列,即put(E e)(存储元素时等待队列空间变得可用)和take()(获取元素时等待队列变为非空)。

BlockingQueue的实现是线程安全的。

Deque(接口)

一个线性集合,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

BlockingDeque

支持两个附加操作的 Queue,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。对应的方法分别是:

1
2
3
4
5
6
// 头部
putFirst(E e);
E takeFirst();
// 尾部
putLast(E e);
E takeLast();

BlockingDeque的实现是线程安全的。

Map(接口)

Map中包含了K-V对,不能包含重复的key,但可以包含相同的value,无序(TreeMap是二叉排序树)。Map 接口提供三种集合视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容,对应的方法分别是:

1
2
3
4
5
6
// 映射关系集合
Set<Map.Entry<K,V> entrySet()
// 键值集合
Set<K> keySet();
// 值的集合
Collection<V> values();
Entry(Map内部接口)

表示K和V之间的映射关系。获得映射关系对象引用的唯一方法是通过Set>的迭代器来实现。

SortedMap(接口)

进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet、keySet 和 values 方法返回)进行迭代时,此顺序就会反映出来。

内容比较多,看来一个晚上写不完,未完待续。。。。。。

Iterator和Iterable

Iterator

功能说明

Iterator表示对Collection进行迭代的迭代器,功能比之前使用的Enumeration更加完善,取代了Enumeration,与其不同的地方有以下两点:

  • 允许调用者利用定义良好的语义在迭代期间从迭代器所指向的collection中删除元素;
  • 方法的名称得到了改进(见名知义);
阅读全文 »

Android 是时候了解一波MD库控件了

发表于 2018-03-05 | 分类于 Android , 控件

htpps://rainmonth.github.io/posts/A180305.html

摘要

本文主要介绍android.support.design.widget包下的一些Material Design控件,很多市场上绚丽的App的实现都是基于这些库的,Android本身为我们封装出来的效果就足够平常使用了,下面我讲分别详细介绍各个MD控件,同时自己会做一些扩展,本文先大体介绍一下各个控件,然后详细介绍CoordinatorLayout控件。

系列文章参考:

  • CoordinatorLayout
  • AppBarLayout介绍
  • SwipeRefreshLayout
  • CardView
  • CollapsingToolbarLayout
  • FloatingActionButton
阅读全文 »

Android 工具命令——使用Android Stuido 快速制作.9.png图

发表于 2018-03-02 | 分类于 Android , 工具命令

本文链接:https://rainmonth.github.io/posts/A180302.html

摘要

日常开发中难免会要用到.9.png图片,如果每次都让UI提供就显得很low了,其实摘要我们能熟练掌握Android Studio这一强大的IDE,我们就能很轻松的制作满足条件的.9.png图片,然后你会说,这么简单啊!

阅读全文 »
<i class="fa fa-angle-left" aria-label="上一页"></i>1…202122<i class="fa fa-angle-right" aria-label="下一页"></i>

216 日志
43 分类
43 标签
GitHub
© 2025 Randy Zhang
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0