设计模式
定义:在长期的程序设计过程中,开发者总结出了很多设计经验,最终经过整理和优化,变成了如今的设计模式。
种类:设计模式有单例模式(最常用)、工厂模式、代理模式等等。
下面讲解一下最常用的单例模式:
单例对象:能保证在一个JVM中,该对象只有一个实例存在。有两种实现,一种是饿汉式,一种是懒汉式
1.饿汉式实现
public class People {
//构造方法私有
private People() {
}
//饿汉式单例实现
private static final People people=new People();
//获取实例
public static People getInstance() {
return people;
}
}
将构造方法私有,这样就保证了在外部是无法来实例化对象,然后先在内部定义一个静态常量对象,然后再写一个static方法 来返回这个对象,这样就保证是一个对象了。
下面写一下测试实例
public class test {
public static void main(String[] args) {
People p=People.getInstance();
People p1=People.getInstance();
System.out.println((p==p1));
}
}
运行结果
这里获取里两个对象,前面讲过 用“==”来判断对象是否指向同一个内存区域,这里返回true,说明是同一个对象。
2. 懒汉式实现
public class People {
//构造方法私有
private People() {
}
//懒汉式单例实现 在第一次调用的时候实例化
private static People people;
//获取实例
public synchronized static People getInstance() {
if(people==null) {
System.out.println("第一次调用的实例化");
people=new People();
}
return people;
}
}
可以看出,饿汉式是先定义实例的,而懒汉式是先定义引用,当第一次调用getInstance的时候 进行对象实例化操作;当然这里我们考虑到多并发的情况 多个线程同时调用这个方法的时候,会出现问题,所以我们加了同步锁 synchronized 来保证同一时刻只有一个线程进入方法。
下面写一个测试类
public class test {
public static void main(String[] args) {
People p=People.getInstance();
People p1=People.getInstance();
System.out.println((p==p1));
}
}
运行结果