读书笔记
文章平均质量分 92
vanpersie_9987
这个作者很懒,什么都没留下…
展开
-
Effective Java读书笔记——第七章 方法
本章讨论方法设计的几个方面: 1、如何处理参数和返回值? 2、如何设计方法签名? 3、如何为方法编写文档? 第38条:检查参数的有效性 很多构造器和方法都会对传进的参数做有效性判断。如索引必须是非负数。对象索引不能为null等。原创 2017-03-17 17:49:46 · 413 阅读 · 0 评论 -
Java编程思想-并发(6)
性能调优 通过前几篇的介绍,我们知道JDK1.5中的java.util.concurrent包中存在大量的辅助并用于提升性能的类。本文将着重讨论并比较这个包中的部分类之间的性能。 比较各类互斥技术 首先看看老式的同步机制synchronized关键字和JDK1.5中新的Lock和Atomic类之间的性能差异和适用范围: abstract class Incrementable {原创 2017-04-13 13:25:19 · 597 阅读 · 0 评论 -
Java编程思想-并发(4)
死锁通过前几篇的介绍,我们知道一个对象可以用synchronized方法或其他形式的加锁机制来防止别的任务在互斥还锁没有释放的时候就访问这个对象。我们还知道,任务可以变成阻塞状态(wait或是await的阻塞方式,即释放锁),所以就可能出现这种情况:某个任务在等待另一个任务,而后者有等待别的任务,这样一直下去,直到链条上的任务有在等待第一个任务释放锁。这就得到了一个任务之间互相等待的连环套,而没有哪原创 2017-04-05 00:44:14 · 510 阅读 · 0 评论 -
Android设计模式-责任链模式
介绍责任链模式(Iterator Pattern),是行为型设计模式之一。什么是“链”? 我们将多个首尾相连所构成的模型称为链。对于链式结构,每个节点都可以被拆开再连接,因此具有很好的灵活性。将这样一种结构应用于编程领域,将每个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端出发,沿着链的路径依次传递给每一个对象,直至有对象处理这个请求为止,这样的模式称为责任链模式。在上代码原创 2017-04-28 11:51:50 · 395 阅读 · 0 评论 -
Android设计模式-观察者模式
观察者模式是一个使用概率很高的模式,它最常用的地方时GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们的依赖变小、甚至毫无依赖。在Android开发中,UI具有易变性,但是业务逻辑变化不大,此时GUI系统就需要一套机制在应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式在此就可以派上用场。定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状原创 2017-05-02 17:34:48 · 545 阅读 · 0 评论 -
Android设计模式-单例模式
单例模式介绍单例模式是应用最广的模式之一。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需一个全局对象,这样有利于协调系统的整体行为。如在一个应用中,应当只有一个ImageLoader实例,这个ImageLoader中又含有线程池、缓存系统、网络请求等,很消耗资源,所以,没有理由让它构造多个实例。这种不能自由构造对象的情况,就是单例模式的使用场景。单例模式定义确保某一个类原创 2017-04-21 14:48:01 · 488 阅读 · 0 评论 -
Android设计模式-备忘录模式
介绍 备忘录模式是一种行为模式,该模式用于保存对象的当前状态,并且可以在之后再次恢复到此状态,这有点像我们平常所说的“后悔药”。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。 定义 在不被破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢复到原先保存的状态原创 2017-05-04 12:13:34 · 817 阅读 · 0 评论 -
Android设计模式-迭代器模式
介绍迭代器模式(Iterator Pattern)又称游标模式(Cursor)模式,是行为型模式之一。迭代器模式源于对容器的访问,如Java中的List、Map、数组等,由于对容器的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法。如果我们将遍历的方法封装到容器中,那么对于容器来说就承担了过多的功能,容器类不仅要维护自身内部的数据元素而且还要对外部提供遍历的接口方法,因为原创 2017-05-04 17:58:34 · 769 阅读 · 0 评论 -
Android设计模式-工厂方法模式
工厂方法模式介绍工厂方法模式(Factory Pattern),是创建型模式之一。它结构简单,应用广泛。下面看看它的定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。使用场景在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。工厂方法模式的通用模式代码//抽象产品类 public abstract class Prod原创 2017-04-25 17:59:00 · 928 阅读 · 0 评论 -
Android设计模式-代理模式
介绍代理模式(Proxy Patter)也称委托模式,属于结构型设计模式。这是一个相当重要的设计模式,Android源码中随处可见。何为代理模式呢?比如每天吃饭时赶进度是常事,就叫公司的同时帮忙买饭,这就是一种代理;如果碰到辞职时老板不给发工资,还得委托个律师 帮你打官司,这也是代理。总之,即便在现实生活中,代理也是无处不在。定义为其他对象提供一种代理以控制这个对象的访问。使用场景当无法或者不想直接原创 2017-05-05 19:18:50 · 1252 阅读 · 0 评论 -
Android设计模式-抽象工厂模式
抽象工厂模式介绍抽象工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。大家联想一下,在现实生活中的工厂肯定都是具体的,也就是说每个工厂都会产生某一种具体的产品,也就是每一个工厂都会产生某种具体的产品,那么抽象工厂意味着生产出来的产品是不确定的。那这岂不是很奇怪?抽象工厂模式起源于以前对不同操作系统的图形化解决方案,如,不同操作系统中的按钮和文本框控件其实现不同,展原创 2017-04-26 14:30:01 · 408 阅读 · 0 评论 -
Android设计模式-策略模式
策略模式介绍考虑这样一种情况:实现某个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来完成该功能。如,排序算法,可以使用插入排序、归并排序、冒泡排序等。针对这样的情况,一种常规方法是将多种算法写在一个类中。如,需要提供多种排序算法,可以将这些算法写到一个类中,每一个方法对应一个具体的方法;当然,也可以将这些排序算法封装到一个统一的方法中,通过if…else 或者case等条件判断原创 2017-04-27 14:14:00 · 373 阅读 · 0 评论 -
Java编程思想-并发(3)
生产者消费者队列使用同步队列来解决任务协作的问题比使用wait和notify更加方便,因为后者需要在每次交互时都握手。而同步队列在任何时刻只允许一个任务插入或移除元素。在java.util.concurrent.BlockingQueue接口中提供了这个队列。原创 2017-04-04 01:00:20 · 394 阅读 · 0 评论 -
Java编程思想-并发(2)
在对象上同步使用synchronized块必须给定一个在其上进行同步的对象。最常见的是synchronized(this),这表示,如果一个线程获得了当前对象的锁,那么该对象其他的synchronized方法和临界区就不能被调用了。下面同步用了两个锁,所以并发访问时,它们相互独立:class DualSynch { private Object syncObject = new Object原创 2017-04-03 15:39:34 · 434 阅读 · 0 评论 -
Effective Java读书笔记——第四章 类和接口
第13条:使类和成员的可访问性最小化 略。。。 第14条:在共有类中使用访问方法而非公有域 class Point { public double x; public double y; } 上面的类没有对数据域进行封装,导致这些数据是可以被直接访问的,也就无法进行任何的约束条件。反正,应该对其进行封装: class Point { private原创 2017-03-08 17:58:13 · 591 阅读 · 0 评论 -
Effective Java读书笔记——第二章 创建和销毁对象
第1条:考虑用静态工厂方法代替构造器每个类都可以提供一个公有的静态工厂方法(static factory method),这就是一个返回类的实例的静态方法:public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }上面的方法将boolean基本类型值转换成一个Boolean对象的引用原创 2017-03-06 17:33:01 · 347 阅读 · 0 评论 -
Effective Java读书笔记——第五章 泛型
JDK1.5引入了泛型,在泛型引入之前,从集合中读取到的每个对象都必须进行转换,如果不小心引入了错误的对象,在运行时就会出错。有了泛型之后,编译器会在编译阶段检查你是否插入了错误的对象。这样是程序更加安全。 第23条:请不要在新代码中使用原生态类型 所谓的原生态类型,就是不太任何实际类型参数的泛型名称,例如List相对应的原生态类型就是List。 本条说的主要是使用通配符的要点,可原创 2017-03-10 10:40:20 · 397 阅读 · 0 评论 -
Effective Java读书笔记——第三章 对于所有对象都通用的方法
第8条:覆盖equals时请遵守通用的约定设计Object类的目的就是用来覆盖的,它所有的非final方法都是用来被覆盖的(equals、hashcode、clone、finalize)都有通用约定。首先看看equals方法:若满足下面的这些情况中的某一个,您可以直接使用Object类中的equals方法而不用覆盖: 类的每个实例本质上是唯一的。对于那些代表实例而不是值的类来说可以不用覆盖equal原创 2017-03-07 16:43:51 · 1569 阅读 · 0 评论 -
Effective Java读书笔记——第十章 并发
线程机制允许同时进行多个活动。本章阐述的建议可以帮助编写出清晰、正确、文档组织良好的并发程序。第66条:同步访问共享的可变数据关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。如果没有同步,一个线程的变化就不能被其他线程看到。同步不仅可以阻止一个线程看到对象处于不一致的状态之中。它还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护的原创 2017-03-22 16:32:21 · 592 阅读 · 0 评论 -
Effective Java读书笔记——第六章 枚举和注解
JDK1.5中加入一种新的类——枚举类型、一种新的接口——注解类型。第30条:用enum代替int枚举类型是指由一组固定的常量组成合法值的类型。例如一年中的季节、太阳系智能柜的行星或一副牌中的花色。在枚举类型出现之前,表示枚举类型的模式是使用一组具名的int常量://JDK1.5之前的老式写法 public static final int APPLE_FUJI = 0; public static原创 2017-03-13 10:45:47 · 572 阅读 · 0 评论 -
Effective Java读书笔记——第八章 通用程序设计
本章主要讨论: 局部变量的处理 控制结构 类库的用法 各种数据类型的用法 反射、本地方法 优化、命名惯例 第45条:将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。 要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。 过早地声明局部变量不仅会使它的作用域过早地扩展,而且结束的过于晚了——如果变量是在“使用原创 2017-03-23 16:00:03 · 434 阅读 · 0 评论 -
Effective Java读书笔记——第九章 异常
充分发挥异常的有点,可以提高程序的可读性、可靠性和可维护性。若使用不当它也会带来负面影响。本章提供了一些有关有效使用异常的指导原则。 第57条:只针对异常的情况才使用异常 考虑下面的代码: try { int i = 0; while(true) { range[i++].climb(); } catch(ArrayIndexOutOfBound原创 2017-03-24 09:59:17 · 357 阅读 · 0 评论 -
Java编程思想-并发(5)
新类库中的构件 JDK1.5引入了java.util.concurrent包,它提供了大量的新类,用于安全而高效地解决并发问题。下面将通过例子一一介绍。 CountDownLatch CountDownLatch被称为倒数计步器,它是Java内置的同步器的一种(还有信号量、CyclicBarrier等同步器,后续将作介绍)。它的功能是阻塞一个或多个线程,这些阻塞的线程需要等待其他线程中的某一原创 2017-04-10 17:06:05 · 650 阅读 · 0 评论 -
Effective Java读书笔记——第十一章 序列化
本文关注序列化API,他提供了一个框架,用来将对象编码城字节流,并从字节流编码中重新构建对象。将一个对象编码成一个字节流,成为将该对象序列化;反之称为反序列化。一旦对象被序列化后,它的编码就可以从一台正在运行的虚拟机被传递到另一太虚拟机上,或者被存储到硬盘上,供以后反序列化时用。本文第78条有意向特别提及的特新个,就是序列化代理模式,它可以帮助你避免对象序列化的许多缺陷。 第74条:谨慎原创 2017-03-24 17:07:52 · 480 阅读 · 0 评论 -
Java编程思想-并发(1)
线程的基本机制 并发编程使我们可以将程序划分为多个分离、独立运行的程序。一个线程就是在进程中的一个执行路径。在使用线程时,CPU将轮流给每个任务分配其占用时间。每个任务都觉得自己在一直占用CPU,但事实上CPU时间是划分成片段分配给了所有的任务(例外情况是程序却是运行在具有多核CPU的设备上)。而线程的一大好处是可以使你从这个层次抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上。原创 2017-04-01 11:36:11 · 1175 阅读 · 0 评论 -
Android设计模式-状态模式
状态模式介绍状态模式中的行为由状态决定,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的和本质完全不同。状态模式是平行的、不可替换的。用一句话表述,策略模式是彼此独立、可替换的。一句话描述就是,状态模式把对象的行为包装在不同状态的对象中,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象再其内部状态改变的时候,其行为也随之改变。状态模式定义当一个对象的内原创 2017-04-27 17:36:13 · 1084 阅读 · 0 评论