单例模式

谁借莪1个温暖的怀抱¢ 2021-10-01 07:48 485阅读 0赞

单例模式有以下特征:

  1. 只有一个对象存在
  2. 对象的实例化必须在类中实现

一、懒汉模式(线程不安全)

  1. package com.kevin;
  2. // 懒汉模式 调用静态方法的时候实例化
  3. public class Singleton1 {
  4. private String name = "lazy";
  5. private Singleton1() {
  6. }
  7. private static Singleton1 single = null;
  8. //静态工厂方法
  9. public static Singleton1 getInstance() {
  10. if (single == null) {
  11. single = new Singleton1();
  12. }
  13. return single;
  14. }
  15. // 线程安全
  16. /*public static synchronized Singleton getInstance() {
  17. if (single == null) {
  18. single = new Singleton();
  19. }
  20. return single;
  21. }*/
  22. // 双重检查锁定
  23. /*public static Singleton getInstance() {
  24. if (singleton == null) {
  25. synchronized (Singleton.class) {
  26. if (singleton == null) {
  27. singleton = new Singleton();
  28. }
  29. }
  30. }
  31. return singleton;
  32. }*/
  33. public String getName() {
  34. return name;
  35. }
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39. public void printInfo() {
  40. System.out.println("the name is " + name);
  41. }
  42. }

二、饿汉模式(线程安全,在类加载的时候完成实例化操作)

  1. package com.kevin;
  2. // 饿汉模式 类加载的时候实例化
  3. public class Singleton2 {
  4. private Singleton2() {
  5. }
  6. private static final Singleton2 single = new Singleton2();
  7. //静态工厂方法
  8. public static Singleton2 getInstance() {
  9. return single;
  10. }
  11. }

三、测试类

  1. package com.kevin;
  2. import java.io.Serializable;
  3. // test singleton function
  4. // 饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,
  5. // 懒汉式本身是非线程安全的
  6. // 单例模式特点
  7. // 只有一个实例存在
  8. public class MainTest implements Serializable {
  9. public static void main(String[] args) { test2(); } private static void test1() { Singleton1 s1 = Singleton1.getInstance(); s1.setName("22222"); s1.printInfo();; Singleton1 s2 = Singleton1.getInstance(); // 输出name的值,是s1的name的值
  10. s2.printInfo(); s2.setName("33333"); // 设置s2的name的值,s1的name值已经变化
  11. s1.printInfo(); } private static void test2() { Singleton1 s1 = Singleton1.getInstance(); s1.setName("aaaa"); Singleton1 s2 = Singleton1.getInstance(); s2.setName("bbbbb"); System.out.println(s1 == s2); } }

转载于:https://www.cnblogs.com/Kevin00/p/7868086.html

发表评论

表情:
评论列表 (有 0 条评论,485人围观)

还没有评论,来说两句吧...

相关阅读

    相关 模式

    简介: 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在

    相关 模式

    单例模式 单例模式(SingletonPattern)是java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及

    相关 模式

    1、懒汉式,线程不安全 是否 Lazy 初始化:是 是否多线程安全:否 实现难度:易 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有

    相关 模式

    应用场景 1. windows的任务管理器 2. 网站的计数器 3. 应用程序的日志 4. 数据库连接池,因为数据库连接是一种数据库资源。数据库软件系统中使用数据

    相关 模式

    1.定义          单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 2.实现步骤 1. 将该类的构造方法定义为私有方法,这样其他处

    相关 模式

    单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责