本文共 3299 字,大约阅读时间需要 10 分钟。
单例模式是一个设计模式,确保一个类在程序中只能有一个实例。其他所有请求都将返回这个唯一实例。这样可以提高性能和防止内存泄漏。
懒汉式的特点是只有当需要时才创建实例。这种方式在第一次需要实例时进行初始化,这样可以减少资源浪费。
public class SingletonStudent { private static SingletonStudent student = null; private String name; private int age; private SingletonStudent() { // 私有化构造 } public static synchronized SingletonStudent getInstance() { if (student == null) { // 双重锁确保线程安全 synchronized (SingletonStudent.class) { if (student == null) { student = new SingletonStudent(); } } } return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
饿汉式会在定义类的时候创建实例,保证无论何时都有一份实例,减少了大量需求时的崩溃可能性。
public class SingletonStudent2 { private static SingletonStudent2 student = new SingletonStudent2(); private String name; private int age; private SingletonStudent2() { // 私有化构造 } public static synchronized SingletonStudent2 getInstance() { return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
双重锁确保在高并发环境下也能线程安全地管理单例实例,保证多次访问只会创建一个实例。
public class SingletonStudent3 { private static SingletonStudent3 student = null; private String name; private int age; private SingletonStudent3() { // 私有化构造 } public static synchronized SingletonStudent3 getInstance() { if (student == null) { synchronized (SingletonStudent3.class) { if (student == null) { student = new SingletonStudent3(); } } } return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
通过在测试类中创建单例对象,设置不同的年龄和姓名,然后验证实例是否一致。
@Testpublic void testSingleton() { SingletonStudent student1 = SingletonStudent.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent student2 = SingletonStudent.getInstance(); //(student1 == student2) 应为 true System.out.println(student1 == student2);}
@Testpublic void testSingleton2() { SingletonStudent2 student1 = SingletonStudent2.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent2 student2 = SingletonStudent2.getInstance(); //student1 == student2 应为 true System.out.println(student1 == student2);}
@Testpublic void testSingleton3() { SingletonStudent3 student1 = SingletonStudent3.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent3 student2 = SingletonStudent3.getInstance(); //student1 == student2 应为 true System.out.println(student1 == student2);}
通过本次实践,我深入理解了单例模式的实现方式,包括懒汉式、饿汉式以及双重锁机制。未来的学习中,我将继续探索如何优化这些实现,确保在性能和线程安全之间取得平衡。此外,我也计划实践更多的设计模式,以提升面对实际项目问题的应对能力。
转载地址:http://pnryk.baihongyu.com/