java单例模式案例

</pre>单例模式是一种常见的设计模式,一般有三种方式,单例模式具有如下特点:<p></p><p><span style="white-space:pre">1.在类的属性中,自己初始化一个静态的私有的类实例<span style="white-space:pre"></span>2.将自己的构造方法写成private的方式,拒绝其他类或者操作再次使用构造函数将单例类再次实例化<span style="white-space:pre"></span>3.向外界提供一个公开的方法来获取自己的唯一单实例</span></p><p><span style="white-space:pre"></span>用一句话来概括就是:单例模式类有且仅有一个自己初始化的实例,通过方法向外界提供该实例</p><p>那么单例模式有什么用途呢或者说单例模式都有哪些常见的呢?</p><p><span style="white-space:pre"></span>你比如说,我们电脑中的打印机管理器,电脑里面只有一个该管理器的,但是我们的电脑可以同时连接上多个打印机,管理器的作用就是管理打印机工作情况,避免出现两个打印机同时工作的时候,会出现打印冲突的现象,管理器主要就干这个事的,我们电脑里面这一类的管理器,内存池等等都是单例模式的一种表现,单例模式就是为了避免同时运行时产生冲突。</p><p>常见的单例模式有三种,这里暂时先介绍两种,因为第三种我还没来得及研究呢!</p><p>1.饿汉单例模式</p><p></p><pre name="code" class="java">pubic class Demo(){
	private static Demo demo = new Demo();//创建private、static的本类的实例
	private Demo(){}			//private私有的构造方法,拒绝初始化第二个实例
	public Demo getDemo(){			//公共开放的获取实例的方法
		return demo;
	}
	//其他方法和操作
}

2.懒汉式单例模式

pubic class Demo(){
	private static Demo demo = null;
	private Demo(){}			//private私有的构造方法,拒绝初始化第二个实例
	public Demo getDemo(){			//公共开放的获取实例的方法
		if(demo == null)
			demo = new Demo();
		return demo;
	}
	//其他方法和操作
}

但是很显然,上面的这个写法是非线程安全的。

小知识:线程安全

线程安全就是我的这段代码在多个线程中同时被运行了,多线程运行的结果与单线程情况下运行出来的结果是不是一致的,如果不一致,那么我们就可以说这是非线程安全的,反之就是个线程安全的,上面的这个代码,很显然,是非线程安全的,饿汉式写法也是如此,非线程安全的。

换句话说,就是如果一段代码的运行,对线程来说属于原子操作或者在不同的进程之间来回切换的不会造成结果的二义性,那么就是线程安全的,这时候我们不需要考虑同步运行的情况了。

3.登记式单例模式

有待补充这种单例模式

下面就来一个实例吧!单例模式最常见的写法我觉得应该就是jdbc获取connection的时候了吧,下面就写一个这几天我在实习时过程中,看到同时给我些的这个东西,我也刚开始实习,这些我都还要继续努力学习才能够会呢!!

例子:

项目中,驱动的环境需要手动去设置和添加了,代码如下:

public final class Server {
	/**
	 * ConnectionFactory对象
	 */
	private ConnectionFactory factory = null;

	/**
	 * 单例模式
	 */
	private static Server svr = new Server();

	/**
	 * 构造方法
	 */
	private Server() {

	}

	/**
	 * 获取单例模式实体
	 *
	 * @return Server
	 */
	public static Server getInstance() {
		return svr;
	}

	/**
	 * 获取数据库连接池工厂
	 *
	 * @return ConnectionFactory
	 */
	public synchronized ConnectionFactory getConnFactory() {
		if (factory == null) {
			try {
				MiniProperties ppt = new MiniProperties();
				ppt.load(Server.class.getResourceAsStream("/jdbc.properties"));<span style="white-space:pre">	</span>//这里需要注意路径,改代码详细信息在下面一段代码中
				factory = new PoolConnectionFactory("test", ppt);
			} catch (Exception e) {
				throw new RuntimeException("jdbc配置文件读取失败!");
			}
		}
		return factory;
	}

	public static void closeResource(Connection conn, Statement stmt,
			ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (Exception e) {

			}
		}
		if (stmt != null) {
			try {
				stmt.close();
			} catch (Exception e) {

			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {

			}
		}
	}
}

java单例模式案例

时间: 2024-10-16 07:56:44

java单例模式案例的相关文章

Java 单例模式探讨

以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. 总结一下我所知道的单例模式实现方式: 1.预先加载法 Java代码 class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1

面向对象:封装(二):包的使用;静态成员;单例模式案例

约定:类名,首字母要大写,如果多个单词组成,每个首 字母都大写,其余的字母小写.   常量名,每个字母都大写. 一:包的概念:创建,使用. 1.新建包: 最上面一行,之前不能再有其它代码了. package 包名; 注意:包名一般都有命名的规范.例如:com.itnba.maya.zza 2.使用包: import 包名.*; import 包名.类名; 例如:import com.itnba.maya.ccz.*; 注意:import不要放在package的上面上 二:常量 常量. final

【深入】java 单例模式(转)

[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头.企图把这个单例说透,说深入.但愿我不会做的太差. 首先来看一个典型的实现: 1 /** 2 * 基础的单例模式,Lazy模式,非线程安全 3 * 优点:lazy,初次使用时实例化单例,避免资源浪费 4 * 缺点:1.lazy,如果实例初始化非常耗时,初始使用时,可能造成性能问

Java小案例(行星移动)

Java小案例 行星移动:参考:三百集 使用软件:idea2017,java 1,图片集:这里  (idea图片源放在target目录下,才能访问到),建议从小往上看... 2,定义MyFrame package my.university; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyFrame extends Frame {

java 编程思想 22.11: java bean 案例代码

java 编程思想  22.11:   java bean 案例代码 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.swing.bean; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.KeyListener; import org.rui.

JAVA单例模式的实践

单例模式是JAVA设计模式中最常用.最重要的设计模式之一. 最简单的写法是: public class TestSingleton { private static String ourInstance = null; //私有化构造器 private TestSingleton() { } //提供静态方法给外部访问 public static String getOurInstance(){ if(ourInstance == null){ ourInstance="单例模式赋值成功!!!&

【转】10个关于java单例模式的面试问题

10 interview question on Singleton Pattern in Java Question starts with What is Singleton class? Have you used Singleton before? Singleton is a class which has only one instance in whole application and provides a getInstance() method to access the s

你所知道的Java单例模式并不是单例模式

当我们搜索单例模式的时候,能看到很多例子,什么懒汉式.饿汉式,大概如下: public class Singleton { private static Singleton instance=null; private Singleton(){ System.out.println("Singleton..init..."); } public static Singleton getInstance(){ if(instance==null){ instance=new Single

java单例模式【csdn-炸死特】

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe