JAVA中单例模式_Java中哪些是单例的

JAVA中单例模式_Java中哪些是单例的1.说明1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)3)单例模式要素:a)私有构造方法b)私有静态引用指向自己实例c)以自己实例为返回值的公有静态方法2.实例饿单例…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1. 说明

1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例

2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)

3)单例模式要素:

a)私有构造方法

b)私有静态引用指向自己实例

c)以自己实例为返回值的公有静态方法

2.实例

饿单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class HungrySingleton {

private static HungrySingleton instance  = new HungrySingleton();

private HungrySingleton(){

}

public static HungrySingleton getInstance(){

return instance;

}

}

懒单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class Singleton {

private Singleton(){

}

private static Singleton instance;

public static synchronized Singleton getInstance(){   //多线程时注意线程安全

if(instance == null){

instance = new Singleton();

}

return instance;

}

}

测试类Driver.java

复制代码 代码如下:

package com.wish.modedesign;

public class Driver {

public static void main(String[] args) {

Singleton s1 = Singleton.getInstance();

Singleton s2 = Singleton.getInstance();

System.out.println(s1==s2);   //true

}

}

3.优点和适用场景

1)单例模式的优点:

在内存中只有一个对象,节省内存空间。

避免频繁的创建销毁对象,可以提高性能。

避免对共享资源的多重占用。

可以全局访问。

2)适用场景:

需要频繁实例化然后销毁的对象。

创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

有状态的工具类对象。

频繁访问数据库或文件的对象。

4.使用时注意事项

1)使用时不能用反射模式创建单例,否则会实例化一个新的对象

2)使用懒单例模式时注意线程安全问题

3)饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169688.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JSPJavaBean组件(动作标签)[通俗易懂]

    JSPJavaBean组件(动作标签)[通俗易懂]什么是JavaBean组件JavaBeans组件是具有以下功能的Java类:一个无参构造函数。(Ano-argumentconstructor.)定义属性的访问器和修改器(getter和setter方法)(Propertiesdefinedwithaccessorsandmutators(getterandsettermethod).)类不得定义任何公共实例变量。该类必须实现java.io.Serializable接口。javaBean的意义javaBean作为数据

    2022年7月27日
    11
  • Android解析中国天气网的Json数据

    Android解析中国天气网的Json数据

    2022年1月29日
    45
  • 51单片机设计8位抢答器_51单片机八路抢答器原理图

    51单片机设计8位抢答器_51单片机八路抢答器原理图基于51单片机八路抢答器的设计毕业设计(论文)题目:基于51单片机八路抢答器的设计系部:专业:学号:学生姓名:指导教师姓名:指导教师职称:2013年xx月xx日XXXXXXXX学院(论文)I摘要随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使…

    2022年10月20日
    3
  • MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)

    MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)(用vs2017以下版本,vs2017不支持)标题这个要用到 ActiveX 控件了,向对话框里面插入一个 WebBrowser控件,之后使用就可以了!=============================利用Web Browser控件创建自己的浏览器①新建一个基于对话框的工程,命名为test,然后在对话框上单击右键,选择Insert ActiveX Control…在弹出的对话…

    2022年8月18日
    6
  • jav_video_ASP 第三方控件

    jav_video_ASP 第三方控件[控件界面][控件介绍]名称:DotNetTextBoxV2.0WebControl免费无限制版类型:ASP.NET2.0增强型TextBox控件作者:小宝.NET2.0主页:http://www.aspxcn.com.cn演示页面:http://www.aspxcn.cn.NET2.0技术讨论QQ群:12462711、15532207功能:1.功能强大的…

    2022年10月7日
    4
  • C#获取进程的主窗口句柄「建议收藏」

    C#获取进程的主窗口句柄「建议收藏」publicclassUser32API{  privatestaticHashtableprocessWnd=null;  publicdelegateboolWNDENUMPROC(IntPtrhwnd,uintlParam);  staticUser32API()  {    if(processWnd==nu

    2022年7月14日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号