一:单例模式
1.定义:单例模式确保某一个类智能创建一个对象。
2.单例模式的实现主要是把构造器设置为private,外部通过Singleton.getInstance()来访问。通用类图:
3.单例模式实现的三种方式:
(1)立即加载/饿汉模式,即在调用方法前,实例已经被创建了,这个模式具有很好的并发性。
public class Signleton {
private static Signleton signleton=new Signleton();
private Signleton(){}
public static Signleton getInstance(){
return signleton;
}
}
(2)延迟加载/懒汉模式,即需要调用方法才能创建实例,这个模式在多线程时会不安全,因此在多线程时需要对getInstance()方法声明synchronized关键字,具体的可以看之前的博客关于单例模式和多线程结合。
public class Signleton {
private static Signleton signleton;
private Signleton(){}
public static Signleton getInstance(){
if(signleton==null){
signleton=new Signleton();
}
return signleton;
}
}
(3)利用内部类,因为内部类不会立即加载,只有调用内部类的方法时才会被调用,所以可以采用内部类来实现单例类,这种模式既实现了懒汉模式又能保证并发性。
public class Signleton {
private Signleton(){}
private static class inner{
private static Signleton signleton=new Signleton();
}
public static Signleton getInstance(){
return inner.signleton;
}
}
4.单例模式的扩展
这里的扩展指的是指定一个类生成几个对象,比如3个或者4个等。这里就不详细说了,知道这么回事就行,等用到再说。
二:工厂方法模式
1.定义:工厂方法模式