「java单例类」java单例类怎么写
本篇文章给大家谈谈java单例类,以及java单例类怎么写对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中哪些对象都是单例模式
- 2、JAVA单例模式有哪些?
- 3、在Java中,单例设计模式是什么意思?有什么优势?
- 4、java 单例模式
- 5、Java单例模式是什么意思?
- 6、Java单例模式怎么用?
java中哪些对象都是单例模式
下面列出一部分Java的单例类:
1)Runtime类
可以通过java.lang.Runtime#getRuntime()获取其实例
2)Desktop类
可以通过java.awt.Desktop#getDesktop()获取其实例
3)SecurityManager类,注意,虽然该类提供了公共无参构造函数,但其内部构造函数仍然以单例的模式在运行。可以说是单例的一种变形设计。
可以通过java.lang.System#getSecurityManager()获取其实例
JAVA单例模式有哪些?
一、懒汉式单例
在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
public
class
LazySingleton
{
/**
*
私有静态对象,加载时候不做初始化
*/
private
static
LazySingleton
m_intance=null;
/**
*
私有构造方法,避免外部创建实例
*/
private
LazySingleton(){
}
/**
*
静态工厂方法,返回此类的唯一实例.
*
当发现实例没有初始化的时候,才初始化.
*/
synchronized
public
static
LazySingleton
getInstance(){
if(m_intance==null){
m_intance=new
LazySingleton();
}
return
m_intance;
}
}
二、饿汉式单例
在类被加载的时候,唯一实例已经被创建。
public
class
EagerSingleton
{
/**
*
私有的(private)唯一(static
final)实例成员,在类加载的时候就创建好了单例对象
*/
private
static
final
EagerSingleton
m_instance
=
new
EagerSingleton();
/**
*
私有构造方法,避免外部创建实例
*/
private
EagerSingleton()
{
}
/**
*
静态工厂方法,返回此类的唯一实例.
*
@return
EagerSingleton
*/
public
static
EagerSingleton
getInstance()
{
return
m_instance;
}
}
**************************************************************************************
懒汉方式,指全局的单例实例在第一次被使用时构建;
饿汉方式,指全局的单例实例在类装载时构建
**************************************************************************************
三、登记式单例
这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
public
class
RegSingleton
{
/**
*
登记薄,用来存放所有登记的实例
*/
private
static
Map
m_registry
=
new
HashMap();
//在类加载的时候添加一个实例到登记薄
static
{
RegSingleton
x
=
new
RegSingleton();
m_registry.put(x.getClass().getName(),
x);
}
/**
*
受保护的默认构造方法
*/
protected
RegSingleton()
{
}
/**
*
静态工厂方法,返回指定登记对象的唯一实例;
*
对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
*
@param
name
*
@return
RegSingleton
*/
public
static
RegSingleton
getInstance(String
name)
{
if
(name
==
null)
{
name
=
"RegSingleton";
}
if
(m_registry.get(name)
==
null)
{
try
{
m_registry.put(name,
(RegSingleton)
Class.forName(name).newInstance());
}
catch
(InstantiationException
e)
{
e.printStackTrace();
}
catch
(IllegalAccessException
e)
{
e.printStackTrace();
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
}
return
m_registry.get(name);
}
/**
*
一个示意性的商业方法
*
@return
String
*/
public
String
about()
{
return
"Hello,I
am
RegSingleton!";
}
}
在Java中,单例设计模式是什么意思?有什么优势?
单例模式:保证一个类在使用过程中,只有一个实例。
优势就是单例模式的作用,这个类永远只有一个实例。
还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。
java的学习建议:
首先要看书读理论,不一定都懂,因为有一个懂的过程;
然后就是分析代码,看看书上的代码的意思,逐行逐行地看,去体会;
最重要的一点就是敲写代码,刚开始不会没关系,照着书一行一行的敲,然后运行,观察结果,把程序运行结果联系程序代码,学得多一点了就尝试修改代码,改一点点看运行结果有什么变化,便于理解程序内部执行的机制。
java 单例模式
System.out.println (Singleton.getInstance());
System.out.println (Singleton.getInstance());
main 函数中有这两句,一摸一样。
第一句执行的时候,第一次调用getInstance(),意思是要获取Singleton的一个对象实例。
而正常情况下,我们要获取对象的话是用 new Singleton(),这个方法的,但是这个方法在Singleton里面被声明为:private ,意思是外界不能调用。
不能调用,我怎么用你的对象?
Singleton里面实现了生成对象的方法,getInstance(),你要用他的对象就必须调用这个方法。
而这个方法里面你也看到了,如果
if(instance == null){
instance = new Singleton();
}
如果没有实例则创建一个新的,但是已经创建过的话,就返回已经存在的实例。
所以输出结果:
net.chelson.chapter5.Singleton@de6ced
net.chelson.chapter5.Singleton@de6ced
你两次调用的这个对象的内存地址都是相同的,也就是说,是同一个东西(对象)
这个总的来说就是:
类的构造方法私有化(防止外界构造新对象)
提供获取实例的方法(用于外界调用)
作用:用于提供只能有一个实例的对象。
Java单例模式是什么意思?
Java单例模式是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例的模式;
Java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例。
(1)Java单例模式有以下特点:单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单例类必须给所有其他对象提供这一实例。
(2)Java单例模式的应用范围:每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中,每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。
Java单例模式怎么用?
java模式之单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
两种形式:
1,饿汉式单例类
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
java单例类的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java单例类怎么写、java单例类的信息别忘了在本站进行查找喔。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。