摘要:
适配器模式概述 与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这 阅读全文
摘要:
原型模式概述 使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多类型的对象。原型对象可以通过调用原型类中的克隆方法来克隆自身从而创建更多的对象。 原型类的核心 是如何实现克隆方法,其中有两种常用的实现方法。 <! more 原型模式结构 1、Prototype(抽象原型类 阅读全文
摘要:
建造者模式概述 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的 阅读全文
摘要:
工厂方法模式概述 在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此外,在简单工厂模式 阅读全文
摘要:
为什么要使用单例模式 实际开发中,为了节约系统资源,有时需要确保系统中某个类只有唯一的一个实例,当这个唯一实例创建成功后,就无法再创建一个同类型的其它对象,所有的操作都只能基于这个唯一实例。为了确保实例的唯一性,可以通过单例模式实现。 <! more 最简单的单例类设计 因为构造函数的私有化,所以在 阅读全文
摘要:
抽象工厂模式概述 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。 抽象工厂模式定义 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为 Kit 模式,它是一种对象创建型模式。 <! 阅读全文
摘要:
所谓原子性操作,指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。 计数器情况: 一般在设计计数器的时候都是先读取当前值,然后 +1,最后更新。真个过程是读 改 写的过程,如果不能保证该过程的原子性,那么就会出现线程安全问题。如下代码就不能保证 ++a 是原子性 阅读全文
摘要:
原子(atomic)本意时“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。 Java 如何实现原子操作 在 Java 中可以通过锁和循环 CAS 的方式实现原子操作。 <! more 1、使用循环 CAS 实现原子操作 JVM 中的 阅读全文
摘要:
乐观锁 总是假设最好的情况,每次取数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断在此期间有没有别人更新这个数据,可以使用版本号机制和 CAS 算法实现。乐观锁适用于多读的场景,这样可以提高吞吐量。 <! more 悲观锁 总是假设最坏的情况,每次去取数据的时候都认为别人会修改,所 阅读全文
摘要:
虽然了解一些有关 Java 的异常处理,但是发现自己对 throw 和 throws 二者还不是很清楚,所以想深入的理解理解。 抛出异常的三种方式 系统自动抛出异常、throw 和 throws三种方式。 <! more 1、系统自动抛出异常 运行该程序后系统会自动抛出 ArithmeticExce 阅读全文
摘要:
CAS 指的是目前 CPU 中广泛支持的一种对内存中的共享数据进行操作的特殊指令,这个指令会对内存中的共享数据进行原子性操作。 CAS 操作过程 CPU 会将内存中将要被更改的数据与期望值做比较,相同则将内存中的值替换成新的值,否则不做操作,最后 CPU 将原来的旧值返回。其中这一系列操作是原子的。 阅读全文