一、单例设计模式(一个类只有一个实例)
1,构造函数私有化(禁止其他类创建对象,保证对象唯一性)
2,类中创建一个本类对象
3,提供一个方法可以获取到该对象(public static修饰)
//1.饿汉式,
public class SingleTonTest {
private SingleTonTest(){}
private static SingleTonTest s = new SingleTonTest();
public static SingleTonTest getInstance(){
return s;
}
}
//2.懒汉式
public class SingleTonTest {
private SingleTonTest(){}
private static SingleTonTest s = null;
public static SingleTonTest getInstance(){
if(s==null)
s=new SingleTonTest();
return s;
}
}
//双重判断(多线程),提高懒汉式效率
public class SingleTonTest {
private SingleTonTest(){}
private static SingleTonTest s = null;
public static SingleTonTest getInstance(){
if(s==null){
synchronized(SingleTonTest.class){//静态同步用的锁
if(s==null)
s=new SingleTonTest();
}
}
return s;
}
}
懒汉式和饿汉式区别:
懒汉式延迟加载,但多线程会遇到安全问题,解决:双重加锁,加的锁是Class对象
二、模板方法模式
在定义功能时,功能的一部分是确定的(final修饰方法,确保不被覆写),一部分是不确定的(public abstract 抽象方法,由该类的子类实现)