当前位置:   article > 正文

Java实现两种简单的单例模式_java写出两种单例模式的代码

java写出两种单例模式的代码

目录

概念:

步骤:

分类:

1.饿汉式

2.懒汉式(简化)

对比:


概念:

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只存在一个对象实例,并且该类只提供一个取得其对象实例的方法

步骤:

(1)构造器私有化(防止直接new)

(2)类的内部创建对象

(3)向外暴露一个静态的公共方法

分类:

1.饿汉式

代码实现:

  1. public class SingleTon01 {
  2. public static void main(String[] args) {
  3. System.out.println(GirlFriend.n1);
  4. }
  5. }
  6. class GirlFriend {
  7. private String name;
  8. public static int n1 = 100;
  9. private static GirlFriend gf = new GirlFriend("小红红");//提前创建
  10. private GirlFriend(String name) {
  11. this.name = name;
  12. }
  13. public static GirlFriend getInstance() {
  14. return gf;
  15. }
  16. @Override
  17. public String toString() {
  18. return "GirlFriend{" +
  19. "name='" + name + '\'' +
  20. '}';
  21. }
  22. }

2.懒汉式(简化)

  1. public class SingleTon02 {
  2. public static void main(String[] args) {
  3. Cat instance1 = Cat.getInstance();
  4. Cat instance2 = Cat.getInstance();
  5. System.out.println(instance1 == instance2);//true
  6. }
  7. }
  8. class Cat {
  9. private String name;
  10. private static Cat cat;//这里没有new
  11. public static int n1 = 100;
  12. private Cat(String name) {
  13. System.out.println("构造器被调用...");
  14. this.name = name;
  15. }
  16. public static Cat getInstance() {
  17. if (cat == null) {//如果还没有创建cat对象
  18. cat = new Cat("小可爱");
  19. }
  20. return cat;
  21. }
  22. @Override
  23. public String toString() {
  24. return "Cat{" +
  25. "name='" + name + '\'' +
  26. '}';
  27. }
  28. }

对比:

1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用才创建

2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题(暂时没有解决线程安全问题)。

3.饿汉式存在资源的可能。因为如果一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式就是使用时才创建,就不存在这个问题。

jdk源码中java.lang.Runtime类使用了单例模式

 

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

闽ICP备14008679号