当前位置:   article > 正文

设计模式--JAVA写一个常用典型的单例模式类_请写出一个单例模式的类。

请写出一个单例模式的类。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,确保某个类只有一个实例.
而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象等常被设计成单例。

一、下面写一个常用的单例类:

  1. public class Singleton {
  2. private int id;
  3. private volatile static Singleton instance=null;
  4. /**
  5. * 防止其他类调public的new构造方法创建类,只能用getInstance()方法创建类
  6. */
  7. private Singleton(){}
  8. /**
  9. * 获取Singleton对象唯一方法
  10. * synchronized加锁保证线程同步
  11. */
  12. public static Singleton getInstance(){
  13. if(instance==null){
  14. synchronized(Singleton.class){
  15. if(instance==null){
  16. instance=new Singleton();
  17. }
  18. }
  19. }
  20. return instance;
  21. }
  22. public int getId() {
  23. return id;
  24. }
  25. public void setId(int id) {
  26. this.id = id;
  27. }
  28. }

singleton类只有一个构造方法,它是被private修饰的,客户对象无法用无参数的构造方法创建实例。
此类提供的统一全局创建实例方法是getInstance(),即

Singleton singleton=Singleton.getInstance();

二、测试

写个测试方法,验证下:

  1. public class TestSingleton {
  2. public static void main(String[] args) {
  3. Singleton s1=Singleton.getInstance();
  4. Singleton s2=Singleton.getInstance();
  5. s1.setId(1);
  6. s2.setId(2);
  7. System.out.println("s1.id="+s1.getId());
  8. System.out.println("s2.id="+s2.getId());
  9. if(s1.equals(s2)){
  10. System.out.println("s1,s2 是同一个对象");
  11. }else{
  12. System.out.println("s1,s2 不是同一个对象");
  13. }
  14. }
  15. }

此实现是现成安全的,JVM加载此类是,对于static属性的初始化只能由一个线程执行且仅一次。


源码Github地址:  https://github.com/readreamer23/SingletonProject




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/729630
推荐阅读
相关标签
  

闽ICP备14008679号