一.单例模式
1.懒汉模式:使用时才实例化。
应当注意:①静态单例对象应增加volatile关键字,防止因为指令重排序导致一个线程实例化中,另一个线程拿到了未实例化完毕的实例。
②判断是否实例化应当检测两次,第一次发现是null,要加锁再判断是否是null,仍然是null才实例化。
2.饿汉模式:类加载时就实例化。可以直接产生私有静态单例对象,也可以产生私有静态内部类持有私有静态单例对象。
二.简单工厂模式
通过向工厂方法的参数指定要实例化的子类对象,产生目的对象。对不同的制品抽象一个接口用作工厂方法的返回值,工厂方法通过调用者指定子类类型的方式进行实例化。
三.抽象工厂模式
通过抽象的工厂中使用抽象的制品的办法,将产生制品的过程完全抽象化,而抽象工厂的子类实现将实现一系列的对于工厂方法和子制品的实例化,最终通过实例化的抽象工厂直接得到对应制品。
四.建造者模式
将复杂对象的创建与它的表示分离,使同样的构建过程可以创建不同的表示。太常见了,不多提了。
五.原型模式
原型实例指定创建对象的种类,并且通过拷贝原型创建新的对象。Java中的cloneable接口或者Object类clone方法均是原型模式,它可以通过自定义办法实现深拷贝。
它可以使得复制对象的操作不依赖具体的类。
六.享元模式
享元模式面对的问题是系统中存在大量相似的对象,需要对这类对象提高复用性。具体例子是线程池、连接池、字符串缓存池等等。
需要注意维护好元对象的内不状态和外部状态,创建对象通过工厂。
七.门面模式:
门面模式是为一组子系统提供一个一致的入口,以整合一系列流程,简化调用。是一个非常常见的内容,不多提了。
八.适配器模式:
将一个类的接口转化为调用者希望的另一个类的接口,使得不兼容的系统能一同工作。
注意,这是一种个别的情况,而非通用的处理。一般对遗留系统使用,一般直接对子类使用。
九.装饰模式:
指的是在不改变原有对象的情况下,增加新的功能给它。实现上可以直接对原有对象包装,提供新的功能实现。比较简单。
十.策略模式:
算法实现和变化对于调用者是隔离的,具体调用哪个策略实际基于调用者的特征或命令。
十一.模板方法模式:
超类中实现算法的骨架,将具体细节延迟到子类中实现。需要子类实现的步骤由超类定义。
十二.观察者模式
当多个对象依赖同一个对象的状态时,应当由被依赖的对象在运行时发送可以被依赖对象捕获的消息。Java中的Observeable和Spring中的ApplicationListener就是观察者模式的实现。
十三.责任链模式
为请求对象建立接收者的链。由链中的一个或多个对象处理请求数据。spring security中明显的使用了责任链模式。
