一、.单例模式
1.三要素:
私有化构造器
类内创建对象
对外提供获取对象的public方法
2.饿汉式
类的初始化时,构建静态属性对象,或在静态块中创建对象,由于类的加载只有一次,所以饿汉式是天然线程安全的,但是由于初始化类就加载对象,可能会造成内存浪费。
3.懒汉式(方法加synchronized,线程安全)
getInstance()方法内创建对象,由于方法被同步,可以确保线程安全,可用,但是影响效率。
4.双重检查
配合volatile关键字,确保属性(对象)对多线程具有可见性。
懒汉式,getInstance()方法内加synchronized同步块,线程安全,双重检查确保效率。
public class SafeDoubleCheckedLocking {
private volatile static Instance instance;
private SafeDoubleCheckedLocking (){
}
public static Instance getInstance(){
if(instance ==null) {
synchronized (SafeDoubleCheckedLocking.class) {
if (instance == null)
instance = new Instance();
}
}
return instance;
}
}
二、代理模式
1.静态代理、动态代理
2.静态代理:
代理对象与被代理对象耦合,不实用
3.动态代理
利用反射,动态获取被代理对象