`
peryou
  • 浏览: 30681 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

两个单例小程序

阅读更多

单例:通俗的说就是单个实例,不论啥时候都想获得同一份实例。

 

第一种方式:

package com.guohao.demo1;

public class Danli1 {

 public static void main(String[] args) {
  MyDanLi demo1=MyDanLi.getDanLi();
  MyDanLi demo2=MyDanLi.getDanLi();
  System.out.println(demo1==demo2);
  
 }

}
class MyDanLi{
 private static MyDanLi instance=new MyDanLi();
 private MyDanLi(){}
 
 public static MyDanLi getDanLi(){
  return instance;
 }
}

输出:true

 

第二种方式:

package com.guohao.demo1;

public class Danli2 {
 public static void main(String[] args) {
  MyDanLi2 demo3=MyDanLi2.getDanLi2();
  MyDanLi2 demo4=MyDanLi2.getDanLi2();
  System.out.println(demo3==demo4);
 }
}
class MyDanLi2{
 private static MyDanLi2 instance=null;
 private MyDanLi2(){}
 
 public static synchronized MyDanLi2 getDanLi2(){
  if(instance==null){
   instance=new MyDanLi2();
  }
  return instance;
 }
}

输出:true

 

总结:单例中必须保证有一个private的构造方法,以此来保证不能从外部来new对象,只能通过get方法得到,并且不论什么时候调用这个方法,获得的实例(instance)都是同一份。

注:第二种方式中synchronized 是防止产生两个instance。你比如:当一个线程进来走到if判断,刚判断完instance==null 这时想instance=new MyDanLi2();刚想new,但还没来得及new时,第二个哥们也走到if(instance==null)这里,于是第一个哥们new了,第二个哥们也new了,就有俩instance了。虽然第二个会把第一个覆盖,但是还是避免这种情况的好。

 

2
1
分享到:
评论
9 楼 Crystal7 2013-04-19  
peryou 写道
Crystal7 写道
这么写不能保证,最好的方法是枚举

嗯 老兄能否写出来让俺学习学习啊 谢谢啊

http://lzh166.iteye.com/blog/620817
8 楼 zhukewen_java 2013-01-24  
peryou 写道
Crystal7 写道
这么写不能保证,最好的方法是枚举

嗯 老兄能否写出来让俺学习学习啊 谢谢啊

http://chjavach.iteye.com/blog/721076
你去看看这个吧,有几篇
7 楼 peryou 2013-01-24  
Crystal7 写道
这么写不能保证,最好的方法是枚举

嗯 老兄能否写出来让俺学习学习啊 谢谢啊
6 楼 Crystal7 2013-01-23  
这么写不能保证,最好的方法是枚举
5 楼 从百草园到三味书屋 2013-01-23  
话说2011年我刚毕业的时候面过的三家公司有2家要写单例,而且第一家我还写错了,哼哼
4 楼 peryou 2013-01-23  
刘永彬 写道
我也是刚学到这,还不是太明白

嗯 我写的这个应该比较通俗易懂了,如果哪里没看明白或者有质疑可以指出来,共同探讨。
3 楼 刘永彬 2013-01-22  
我也是刚学到这,还不是太明白
2 楼 peryou 2013-01-22  
zhukewen_java 写道
刚刚入了单例的门

我是一个菜鸟,让您见笑了
1 楼 zhukewen_java 2013-01-22  
刚刚入了单例的门

相关推荐

    MFC托盘单例运行小程序

    本项目名为“MFC托盘单例运行小程序”,是基于Visual Studio 2008实现的一个MFC对话框程序,它具备两种核心功能:托盘运行和单例运行。 托盘运行是指将应用程序最小化到系统托盘区,而不是任务栏。这种方式使得用户...

    单例模式与垃圾回收机制

    关于单例对象是否会成为垃圾回收的目标,业界存在两种观点: 1. **支持回收**:认为长时间未被使用的单例对象应该被视为垃圾并被回收,以节省内存资源。 2. **反对回收**:认为单例对象不应被回收,因为它们通常是...

    30个c#小程序

    13. **设计模式**:如单例模式、工厂模式、观察者模式等,是软件设计的重要组成部分,也可能在这些小程序中体现。 14. **单元测试**:通过 NUnit 或 MSTest 进行代码测试,保证程序质量。 15. **多线程编程**:...

    Java自定义连接池,单例模式

    在Java编程中,连接池和单例模式是两个非常重要的概念,它们对于高效地管理和使用数据库资源至关重要。这里我们将深入探讨这两个主题,并结合一个通用的BaseDao类来说明如何实现数据库的快速访问。 首先,连接池是...

    耦合和单例模式的理解

    低耦合则意味着各个模块之间的依赖关系较弱,一个模块的修改对其他模块的影响较小。 1. **高内聚**:为了实现高内聚,我们需要确保模块内部的元素紧密相关并且共同完成一项或多项紧密相关的功能。例如,在一个项目...

    源码_java_微信小程序_

    这两个领域都是IT行业中非常重要的部分,它们的结合为开发者提供了丰富的功能和用户友好的界面,使得应用程序能够便捷地运行在移动设备上。 1. **Java编程语言**: - **基础语法**:Java是面向对象的语言,它包含...

    基于java的聊天小程序

    Socket包括两个主要部分:服务器端的ServerSocket和客户端的Socket。服务器端通过创建ServerSocket监听特定端口,等待客户端的连接请求;客户端则通过Socket对象连接到服务器指定的IP和端口,建立连接后,双方即可...

    C#編寫的實用小程序

    13. 设计模式:小程序可能展示了常见的设计模式,如工厂模式、单例模式、观察者模式等,有助于提高代码的可维护性和可扩展性。 14. 自动化测试:C#支持单元测试和集成测试,通过例如NUnit或xUnit框架编写测试用例。...

    Java聊天小程序源码

    - **Swing或JavaFX**:Java提供了Swing和JavaFX两个图形用户界面(GUI)库,用于构建聊天窗口和交互元素。 - **事件处理**:GUI中的按钮点击、文本框输入等都需要事件监听和处理。 7. **数据序列化与反序列化**:...

    单例模式下的登录界面

    这主要涉及两个核心方面:一是使用单例模式管理数据库连接(通过`DBUtil`类实现),二是设计登录界面并处理登录逻辑(通过`LoginForm`类实现)。 ### 单例模式下数据库连接管理 在Java中,单例模式是一种常用的...

    JAVA小程序设计

    【JAVA小程序设计】 Java是一种广泛使用的面向对象的...在这个“JAVA小程序设计”主题中,你可以通过实践和学习这些概念来提升你的编程技能,创建出自己的Java小程序。同时,鼓励大家参与讨论和分享,以便共同进步。

    很实用的30个c#小程序实例

    在C#编程语言的世界里,这30个小程序实例提供了丰富的学习材料,涵盖了从基础到进阶的各种概念。对于初学者来说,它们是理解和掌握C#语法、编程逻辑以及常见问题解决方案的理想起点。以下是这些实例可能包含的一些...

    3种设计模式的java小程序

    例如,有`AbstractFactory`接口和两个实现类`FactoryA`、`FactoryB`,分别对应不同类型用户。每个工厂能创建特定类型的按钮、文本框等组件,从而提供与用户身份相符的界面。 整个程序的结构可能如下:`Main`类初始...

    51个c#小程序例子

    除了这两个特定的例子,C#小程序还可能涵盖其他众多主题,例如: 1. 控制台应用:使用`Console`类进行输入输出,处理控制台命令行交互。 2. Windows Forms:创建具有窗口界面的应用,利用控件和事件处理。 3. WPF:...

    JAVA源码,计算器小程序

    例如,`add()`方法接收两个参数,代表要相加的数字,并返回它们的和。方法调用使得代码模块化,易于理解和重用。 4. **输入与输出处理** 在计算器程序中,可能包含了`Scanner`类来处理用户输入,用于获取键盘输入...

    java单例设计模式

    这个小练习适合初学者来学习和理解单例模式的基本概念和实现方式。 单例模式的关键在于限制类的实例化过程,确保任何时候都只有一个实例存在。在Java中,通常有两种主要的实现方式:饿汉式和懒汉式。 1. 饿汉式...

    单例模式----数据库连接池管理类的应用

    在具体实现中,单例模式通常有懒汉式和饿汉式两种方式。懒汉式是在第一次使用时才创建实例,保证了线程安全但可能有性能损失;饿汉式是在类加载时就创建实例,效率高但不支持延迟加载。还有一种双重检查锁定(DCL)...

    C#实现微软计算器小程序

    在本文中,我们将深入探讨如何使用C#编程语言来实现一个功能完备的微软计算器小程序。C#是一种由微软开发的面向对象的编程语言,广泛应用于Windows应用开发、游戏开发以及Web服务等领域。创建一个计算器程序是学习C#...

    C#50个经典小程序(新手必备)

    "C#50个经典小程序(新手必备)"这个压缩包文件很可能包含了50个精心挑选的C#代码示例,旨在帮助初学者快速上手并深入理解C#的关键概念。下面将对可能涵盖的知识点进行详细的阐述。 1. **基础语法**:包括变量声明、...

Global site tag (gtag.js) - Google Analytics