博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java单例设计模式(实现Java的一个类只有一个对象)
阅读量:5140 次
发布时间:2019-06-13

本文共 1386 字,大约阅读时间需要 4 分钟。

单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类。

核心便是希望一个类只有一个对象。 

如何实现类在内存中只有一个对象呢?

第一步:构造私有;

第二步:本身提供一个对象;
第三步:通过公共的方法让外界访问。

以下就是实现单例类: 

static关键字修饰对象,则该对象就变成静态资源,共享,形象点说,她就失足了,谁都可以上!
class Single{    private static Single s = new Single(); //声明本类的引用类型变量,并且使用该变量指向本类对象。使用static关键字使得s在内存中只有一份。    private Single(){} //声明私有构造函数,使得在本类外不能实例化本类对象    public static Single getSingleObject(){        return s;    }    //提供一个公共的静态的方法,可以返回这个唯一的对象。}class Demo{    public static void main(String []args){        Single s1 =Single.getSingleObject();        Single s2 =Single.getSingleObject();        System.out.Println("是一个对象吗?"+(s1 == s2));        //==用来判断这两个对象的内存地址是否一样,如果一样,说明是同一个对象。    }}

以上的单例设计模式称为饿汉模式,意思是不管需不需要这个对象,但在类文件加载的时候这个对象已经被实例化了,如果这个类对象至始至终都没有使用,则这个类对象就会浪费内存空间,因此有了以下的懒汉模式,也就是在使用的时候,才创建对象,代码实现如下:

class Single{    private static Single s;//声明一个该对象的引用,但不进行实例化,static不初始化时,s默认的值为null    private Single(){}//保证只能在本类实例化对象    public static synchronized  Single getSingleObject(){        if(s==null){ //判断该引用是否为空            s = new Single();         }        return s;    }}class Demo{    public static void main(String []args){        Single s1 = Single.getSingleObject();        Single s2 = Single.getSingleObject();        System.out.pringln("是同一个对象吗?"+(s1==s2));    }}

以上为懒汉单例设计模式的实现,但是该模式有个缺陷,就是在多线程访问的时候有一定的安全隐患。所以目前还是推荐使用饿汉模式。

 

 

转载于:https://www.cnblogs.com/zhaoyanhaoBlog/p/9181936.html

你可能感兴趣的文章
Ubuntu中MySQL中文乱码解决
查看>>
关于jQuery的ajax的源码的dataType解读
查看>>
类方法和对象方法的区别
查看>>
Lintcode376-Binary Tree Path Sum-Easy
查看>>
MonoTouch
查看>>
Spring MVC 知识总结
查看>>
【7】Django网页视图模板处理
查看>>
D3DXLoadMeshFromXof 0xC0000005: 读取位置 0x00000000 时发生访问冲突
查看>>
Python爬虫学习1
查看>>
Application之图书馆
查看>>
绿色djvu阅读软件
查看>>
最长子串 FZU2118
查看>>
vue中input限制最多两位小数
查看>>
spring mvc ModelAndView 404的原因
查看>>
confusing c++ 重写 与 重定义 记录1
查看>>
eclipse搭建j2ee
查看>>
Run Windows Mobile Device Emulator without Visual Studio
查看>>
ASP.NET
查看>>
音乐.唱片常识
查看>>
android控制显示和隐藏视图或控件的操作
查看>>