创建型模式用于如何更好、更高效、更容易的创建对象
单例模式
懒汉式:(线程安全,调用效率高,不能延迟加载)java.lang.RunTime
饿汉式:(调用效率不高,可以延迟加载)java.awt.Toolkit.getDefaultToolkit()
双重检测琐式(java volatile关键字修改,由于jvm底层内部模型原因,偶尔会出问题,不建立使用)
静态内部类式(线程安全,调用效率高,可以延迟加载)
枚举单例(线程安全,调用效率高,不能延迟加载,防止反射和反序列化漏洞)java.lang.Thread.State
工厂模式
简单工厂模式(静态工厂模式):不修改工厂类无法扩展,违背OCP
工厂方法模式:定义工厂接口,实现多个工厂:不修改已有类的前提下,通过新增工厂类实现扩展
抽象工厂模式: 多个产品簇,不可以增加产品,可以增加产品簇
应用场景:
JDK Calendar getInstance方法
JDBC Connection对象的获取
Hibernate Session创建
spring bean对象管理
XML DocumentBuilderFactory
Class newInstance方法
建造者模式
分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用;
由于构建和装配分离,可以实现更好的复用
开发中应用场景:
StringBuilder append
SQL PreparendStatement
JDOM DomBuilder SAXBuilder
原型模式(prototype)
通过new产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式
浅克隆:
对于引用对象,如果修改了其中一个,则均变化
深度克隆:(利用序列化和反序列化技术)
对象的引用对象也要进行克隆