文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java单例模式如何实现

2023-06-19 12:10

关注

本篇内容主要讲解“java单例模式如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java单例模式如何实现”吧!

0x01 宫女请安

在朕的后宫中,皇后当之无愧的是天下第一(朕只能当第二),为了彰显皇后在后宫的地位,每日早晨,宫女必须向皇后娘娘请安。

一大群宫女每天都要来向皇后请安,皇后每天也要接见这群小妹妹们。由于皇后的唯一性,众妹妹在请安的时候都会大呼“皇后娘娘千岁!”,注意,大家称呼的是皇后娘娘,而不是张皇后、李皇后什么的。天天向一个皇后请安,也就不会把自己弄迷糊了。这点在设计领域中就要求,一个类只能生成一个对象。

那么怎么来实现呢?对象的产生是通过new关键字完成的(这是主要方式),这个怎么来控制呢?构造函数!在使用new关键字创建对象的时候,都会根据输入参数调用相应的构造函数,如果我们把皇后的构造函数设置成private私有访问权限是不是就可以禁止外部创建对象了?

下图就是宫女向唯一的皇后请安的过程。

java单例模式如何实现

只有两个类:Queen代表皇后,Maid代表宫女。

1.代码清单 皇后类
public class Queen {    private static final Queen queen = new Queen();    private Queen() {    }    public static Queen getInstance() {        return queen;    }    public static void say() {        System.out.println("本宫是yyj,尔等跪安吧~");    }}

通过定义一个私有访问权限的构造函数,避免被其他类new出来一个对象,而Queen自己则可以new一个对象出来,其他类对该类的访问都可以通过getInstance获得同一个对象。

现在皇后有了,宫女要出场了。

2.代码清单 宫女类
public class Maid {    public static void main(String[] args) {        for(int i = 1 ; i < 4; i++) {            Queen queen = Queen.getInstance();            System.out.println("今天是第 " + i + " 天请安!");            queen.say();        }    }}

宫女请安的运行结果如下所示。

今天是第 1 天请安!本宫是yyj,尔等跪安吧~今天是第 2 天请安!本宫是yyj,尔等跪安吧~今天是第 3 天请安!本宫是yyj,尔等跪安吧~

宫女每天向皇后请安,每天抬头一看,呦,老熟人了,还是昨天那个皇后,这就是单例模式!

0x02 单例模式

1.概念

单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:

Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

2.构建方式

通常单例模式在Java语言中,有两种构建方式:

懒汉方式。指全局的单例实例在第一次被使用时构建。 饿汉方式。指全局的单例实例在类装载时构建。

3.代码清单 饿汉模式
 public class Singleton {    private final static Singleton INSTANCE = new Singleton();    // Private constructor suppresses       private Singleton() {}    // default public constructor    public static Singleton getInstance() {        return INSTANCE;    }  }
4.代码清单 懒汉模式
public class Singleton {    private static volatile Singleton INSTANCE = null;    // Private constructor suppresses     // default public constructor    private Singleton() {}    //thread safe and performance  promote     public static  Singleton getInstance() {        if(INSTANCE == null){             synchronized(Singleton.class){                 //when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.                 if(INSTANCE == null){                      INSTANCE = new Singleton();                  }              }         }        return INSTANCE;    }  }

到此,相信大家对“java单例模式如何实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯