Java设计模式中的单例模式
有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式。设计单例模式主要采用了Java的private和static关键字属性。单例模式又根据是否延迟加载实例过程分为懒汉式单例模式和饿汉式单例模式。
例如下面理解一段符合单例模式的需求。假设人分为普通人和超人两种,地球上大多数都是普通人,而超人只有一个,我们在创建这两个实体类的时候就应该采用单例模式。下面是分别采用懒汉式和恶汉式单例模式的代码实现:
懒汉式单例模式的实现:
class SuperMan3{//懒汉式
private SuperMan3(){//私有化构造器
}
public static SuperMan3 s3 = null;
public static SuperMan3 getInstance(){
if(s3==null){
s3 = new SuperMan3();
}
return s3;
}
}
饿汉式单例模式的代码实现:
class SuperMan4{//恶汉式
private SuperMan4(){//私有化构造器
}
private static SuperMan4 s4 = new SuperMan4();
public static SuperMan4 getInstance(){
return s4;
}
}
可以看出,取名为懒汉式和饿汉式还是很生动的,具体懒汉式和饿汉式单例模式在线程安全和资源占用上还有很多的区别,这里就不详细说明了。然后验证一下是否这两个超人类满足单例模式,我们可以在主函数中创建两个实例,然后比较它们是否相等。
SuperMan3 s3 = SuperMan3.getInstance();
SuperMan3 s33 = SuperMan3.getInstance();
System.out.println(s3==s33);//true SuperMan4 s4 = SuperMan4.getInstance();
SuperMan4 s44 = SuperMan4.getInstance();
System.out.println(s4==s44);//true
输出的结果都是true,可以看出无论实例化了多少个实例,最终实例之间全是相等的,即只有一个实例,满足了单例模式的需求。
Java设计模式中的单例模式的更多相关文章
- Java设计模式之《单例模式》及应用场景
摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6510196.html 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该 ...
- Java设计模式之【单例模式】
Java设计模式之[单例模式] 何为单例 在应用的生存周期中,一个类的实例有且仅有一个 当在一些业务中需要规定某个类的实例有且仅有一个时,就可以用单例模式 比如spring容器默认初始化的实例就是单例 ...
- Java设计模式4:单例模式
前言 非常重要,单例模式是各个Java项目中必不可少的一种设计模式.本文的关注点将重点放在单例模式的写法以及每种写法的线程安全性上.所谓"线程安全性"的意思就是保证在创建单例对象的 ...
- Java设计模式探讨之单例模式
单例模式是在平时的项目开发中比较常见的一种设计模式,使用比较普遍,网上的资料也是一抓一大把,小Alan也来凑凑热闹,为以后充实点设计模式相关的内容做个简单的开篇. 单例模式是一种创建对象的模式,用于产 ...
- 【java设计模式】-04单例模式
单例模式 定义: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类型: 创建类模式 类图: 单例模式特点 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单 ...
- 重学 Java 设计模式:实战单例模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...
- Java设计模式中适配器模式的实现方法
在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢? 适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹 ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- Java设计模式09:单例模式的强化(控制实例个数n)
1. 单例模式的本质: 控制实例数目(目的节约资源) 2. 单例模式体现的一些思想: (1)延迟装载(Lazy Load):懒汉式 (2)缓存:饿汉式 3. 单例模式的变形使用: 控制使用实例个数为3 ...
随机推荐
- 算法:插入排序(Insertion Sort)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法
第一步:下载安装的文件 1. MySQL:下载地址mysql-5.1.49-win32.msi: 2. Apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8 ...
- Hashing图像检索源码及数据库总结
下面的这份哈希算法小结来源于本周的周报,原本并没有打算要贴出来的,不过,考虑到这些资源属于关注利用哈希算法进行大规模图像搜索的各位看官应该很有用,所以好东西本小子就不私藏了.本资源汇总最主要的收录原则 ...
- 我所遭遇过的游戏中间件---HumanIK
我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...
- OTL翻译(8) -- otl_long_string/otl_long_unicode_string类
otl_long_string/olt_long_unicode_string 这两个类主要用来处理大对象数据.从OTL4.0版本开始,otl_long_string还可以处理任何类型的RAW/BIA ...
- ING【转载】epoll总结系列
epoll的总结之一基本的参数设置 http://fpcfjf.blog.163.com/blog/static/55469793201452095738566/?suggestedreading&a ...
- 在Servlet的init方法中创建线程
servlet代码如下: package com.weichat.servlet; import java.io.IOException; import javax.servlet.ServletEx ...
- 国庆大礼包:2014年最全的ANDROID GUI模板和线框图免费下载
距离上次分享GUI模板有很长时间了,这段时间里设计趋势不断变化,谷歌推出了最新的Android L以及全新的界面设计,UI设计师又有得忙了,今天收集了一组实用的GUI模板和线框图,包含最新的Andro ...
- HDU OJ Digital Roots 题目1013
/*Digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- THINKPHP URL模块大小写导致404问题
最近我使用THINKPHP开发了一个项目在本地的集成开发环境wampserver做开发时并没有出现问题 上传到linux系统也没有出现问题,但当上传到windows平台上就出现了问题"文件4 ...