Java单例设计模式(实现Java的一个类只有一个对象)
单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类。
核心便是希望一个类只有一个对象。
如何实现类在内存中只有一个对象呢?
第一步:构造私有;
第二步:本身提供一个对象;
第三步:通过公共的方法让外界访问。
以下就是实现单例类:
- 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));
- }
- }
以上为懒汉单例设计模式的实现,但是该模式有个缺陷,就是在多线程访问的时候有一定的安全隐患。所以目前还是推荐使用饿汉模式。
Java单例设计模式(实现Java的一个类只有一个对象)的更多相关文章
- Java单例设计模式的实现
1. 单例设计模式的定义 单例设计模式确保类只有一个实例对象,类本身负责创建自己的对象并向整个系统提供这个实例.在访问这个对象的时候,访问者可以直接获取到这个唯一对象而不必由访问者进行实例化. 单例设 ...
- Java——单例设计模式
设计模式:解决某一类问题最行之有效的方法.Java中23种设计模式:单例设计模式:解决一个类在内存中只存在一个对象. 想要保证对象唯一.1,为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 ...
- 转:java单例设计模式
本文转自:http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html 单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton ...
- Java单例设计模式和多例设计模式
单例设计模型 教学视频链接:https://edu.aliyun.com/course/1011 1,private不可以在类外部访问,但可以在内部访问 2,此时Singleton类内部的instan ...
- java 单例设计模式
1.饿汉单例设计模式: 步骤 : 1.定义一个私有的静态成员变量来引用对象(私有的静态对象),设置对象唯一. 2.私有化构造方法,防止new对象. 3.创建一个公开的静态方法,返回上面的 ...
- java单例设计模式总结及举例
* 设计模式:前人总结出来的经验,被后人直接拿来使用. * 单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用. * 分析: * 1.用户只能有一个对象 * 2. ...
- 对Java单例设计模式中懒汉式类定义的讨论
全世界人民都知道单例设计模式中类的定义分为懒汉式和饿汉式两种,然而今天并不是要把它们做横向比较.实际上,不论饿汉式类的代码看起来有多么美轮美奂,在实际开发中它的效率总是不如懒汉式的.然而在笔试和面试中 ...
- java—单例设计模式
单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 什么时候使用? 1.通过在工具类的设计中使用: ...
- Java 单例设计模式之 饿汉式和懒汉式
public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...
随机推荐
- Linux基础命令---文本编辑ex
ex ex会启动vim编辑器,它的执行效果和vim –E相同.从ex模式回到普通模式,可以在vim中输入:vim. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.op ...
- rabbitMq 教程
https://github.com/401Studio/WeekLearn/issues/2 目录 RabbitMQ 概念 exchange交换机机制 什么是交换机 binding? Direct ...
- MVC模式、加密、jsonwebtoken
一.MVC模式(架构思想) M:model层,主要是数据的增删改查 V:view层,主要是视图的展示 C:controller层,主要负责业务逻辑 二.加密(md5加密.sha256加密)1.sha2 ...
- cms STW 的两个阶段
CMS在初始标记和重复标记阶段会停顿
- 计算概论(A)/基础编程练习(数据成分)/2:奥运奖牌计数
#include<stdio.h> int main() { // n天的决赛项目 int n; scanf("%d",&n); ] = {}; while ( ...
- hibernate validator自定义校验注解以及基于服务(服务组)的校验
hibernate validator是Bean Validation 1.1 (JSR 349) Reference Implementation,其广泛的应用在mvc的参数校验中,尤其是使用服务端 ...
- Summarization of Tech Interviews
Summarization of Tech Interviews(技术面试总结) 手心网(2015) Q1. 解释一下 TCP/IP 协议之滑动窗口? 滑动窗口协议的维基:https://en.wik ...
- k8s开发环境
在搭建开发环境之前, 请Try Kubernetes,Get Started and CONCEPTS 可以自己使用minikube 来搭建个环境, 自己玩一玩. K8s需要一些依赖. 参看官方文档 ...
- tftp 传输文件
tftp 服务方便文件传输,但是没有理清的话,容易传输错误. -g 表示下载文件 (get) -p 表示上传文件 (put)-l 表示本地文件名 (local file) -r 表示远程主机的文件名 ...
- ProgressDemo
封装了下如下View滑动效果,类似网易的首页滑动效果. 详情见: https://github.com/VivienQin16/ProgressDemo