java设计模式--单例模式
2019-08-16 10:10:06来源:博客园 阅读 ()
java设计模式--单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当我们需要一个类只有一个实例时,我们就可以使用单例模式,单例模式分为两种,懒汉式单例和饿汉式单例。首先我们看懒汉式单例
public class SuperMe { /** * volatile 确保superMe在线程中同步 */ private static volatile SuperMe superMe = null; /** * private避免类在外部被实例化 */ private SuperMe(){ System.out.println("I'm the superMe"); } public static synchronized SuperMe getInstance(){ if(superMe == null){ superMe = new SuperMe(); }else { System.out.println("No second allowed"); } return superMe; } public void getName(){ System.out.println("Hitler"); } }
测试类
public class LazySingleton { public static void main(String[] args) { SuperMe superMe = SuperMe.getInstance(); superMe.getName(); SuperMe superMe2= SuperMe.getInstance(); superMe2.getName(); if(superMe ==superMe2){ System.out.println("Hitler is a dictator"); }else { System.out.println("they are not same"); } } }
测试结果:
I'm the superMe
Hitler
No second allowed
Hitler
Hitler is a dictator
懒汉式单例的特点是类加载时没有生成实例,只有当第一次调用getInstance()方法时才会去创建这个单例。
饿汉式单例的例子如下:
public class HungrySuperMe { private static HungrySuperMe hungrySuperMe = new HungrySuperMe(); private HungrySuperMe() { System.out.println("I'm the hungrySuperMe"); } public static HungrySuperMe getHungrySuperMe() { return hungrySuperMe; } }
测试类
public class HungrySingleton { public static void main(String[] args) { HungrySuperMe hungrySuperMe = HungrySuperMe.getHungrySuperMe(); HungrySuperMe hungrySuperMe2 = HungrySuperMe.getHungrySuperMe(); if(hungrySuperMe == hungrySuperMe2){ System.out.println("I'm the only one"); }else { System.out.println("I'm not at the top"); } } }
测试结果:
I'm the hungrySuperMe
I'm the only one
饿汉式单例在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全的,可以直接用于多线程而不会出现问题。
原文链接:https://www.cnblogs.com/yimengyizhen/p/11166940.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:SpringMVC的自动配置解析
下一篇:【原】Spring测试类代码
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash