- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式-单例式-java
设计模式之---单例模式
单例模式是比较简单、也是很常用的一种模式
需要做注意的问题全在代码中注释了
另外,使用枚举类型来实现单例模式是一种比较新奇的办法
package mode.singleton;
/**
* 单例模式,这种写法属于 饿汉式单例模式
*
* 饿汉式单例模式,属于刚加载类的时候就创建一个对象出来,而不管这个对象以后会不会用的到
* 如果以后这个对象没有用到(极小概率),就会造成空间浪费
* 属于典型的 用空间换时间
*
* @author root
*
*/
public class SingletonHungrey {
private static SingletonHungrey instance = new SingletonHungrey();
/**
*上面一句话也可以这么写:
*
* private static SingletonHungrey instance = null;
*
* static{
* instance = new SingletonHungrey();
* }
*
*/
private SingletonHungrey(){}
public static SingletonHungrey getInstance(){
return instance;
}
}
package mode.singleton;
/**
* 这种写法叫做 懒汉式 单例模式
* 懒汉式单例模式,就是加载类的时候不创建对象,而是在用到这个对象的时候,判断为空才去创建一个对象
* 这么着,如果后来没有用到这个对象(极小概率),那么就会节省空间。但是每次取对象就会判断一次,则会浪费一些性能
* 并且使用了synchronized同步方法以后,多线程也会被顺序执行
* 这种属于典型的用时间换取空间
*
*
* @author root
*
*/
public class SingletonLazy {
private static SingletonLazy instance = null;
private SingletonLazy(){}
/**
* 这种方式再多线程下会有问题,比如 下面的情况,
* 加入线程A已经经过了if判断,但是还没有来得及创建对象,而同时线程B正在if判断或者也过了判断,
* 那么这种情况就会 造成 创建两个对象,就不是单例模式了。
*
* 如果只是取一个对象,错误还不算很严重,但如果这是一个缓存,就会引发严重的错误,而这种错误是很难发觉的
*
* 所以,保险起见,我们应该对该方法同步,即 getInstance2
*
* @return
*/
public static SingletonLazy getInstance(){
if(instance == null){//多线程问题:线程B走到这
// 多线程问题 : 线程A 走到这里
instance = new SingletonLazy();
}
return instance;
}
/**
* 经过同步以后的方法,不会出现线程安全问题
* @return
*/
public static synchronized SingletonLazy getInstance2(){
if(instance == null){
instance = new SingletonLazy();
}
return instance;
}
}
package mode.singleton;
/**
* 懒汉式 单例模式 和饿汉式单例模式 都有各自的优点和缺点,那么能不能综合起来,创建一个比较完美的解决方案呢?
* 还真有高人想出来了。
*
* 通过分析,我们知道,饿汉式唯一的缺点就是可能会浪费一点空间,虽然是极小概率,但是我们还是想要避免。
* 那么怎么才能让别人在用到这个类的时候在创建对象呢?
*
* .......
*
*
* 就是使用内部类!使用内部类来达到推迟创建的目的
*
* @author root
*
*/
public class SingletonPerfect {
private SingletonPerfect(){}
/**
* 使用这种静态内部类,我们就可以在外部使用这个单例类的时候再去创建对象,即节省了空间,又节省了时间
您可能关注的文档
- 论新时期学校教常规管理的创新性.doc
- 论施工项目中质通病预防措施.doc
- 论构建有限诉辩易制度可行性探究研究与分析.doc
- 论框架结构与框结构的区别与联系.doc
- 论档案管理信息建设.doc
- 论桥梁施工安全理的要点.doc
- 论桩基施工问题处理措施.doc
- 论歌唱中声与情结合.doc
- 论汉代国家财政帝室财政管理体制——与加藤繁先生商榷.doc
- 论民办高校青年师的生存状况(江苏)2.doc
- XX企业2025年数字化转型与智能制造产业人才培养策略规划报告.docx
- 2025年小鹏汽车智能化汽车用户需求预测报告.docx
- 社区体育健身中心智能化改造技术趋势及2025年市场预测.docx
- 2025年箱包配饰行业跨境直播营销风险防控指南.docx
- 聚焦2025年:农村金融服务体系改革与市场潜力深度报告.docx
- 2025年文化IP授权与旅游产业融合发展模式研究.docx
- 共享健身仓用户运动数据在健身行业市场趋势分析中的应用研究.docx
- 2025-2026学年高中生物学选择性必修2 生态与环境沪科技版(2020)教学设计合集.docx
- 2025年跨境电子商务平台户外装备市场渠道拓展与用户体验优化报告.docx
- 文创IP联名合作创新策略:2025年行业深度分析.docx
文档评论(0)