单例模式

单例模式  
   懒汉式
public class RunMain {

	/**
	 * 私有构造
	 */
	private RunMain() {
	}
	
    /**
     * 内部类,用于占位,只有
     */
	private static class SingletonRunMain {
		private static final RunMain runMain = new RunMain();
	}

	public static RunMain getInstance() {
		return SingletonRunMain.runMain;
	}

}
 
 饿汉式:
public class RunMain {

	private RunMain() {
	}

	private static RunMain runMain = new RunMain();

	public RunMain getInstance() {
		return runMain;
	}

}
 
使用
     第一、文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件
    第二、创建一个对象需要消耗的资源过多。数据库连接池的设计一般采用单例模式
    第三、全局数据的共享:作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
    第四:其二通过线程同步控制资源的并发访问
 
静态方法与单例模式
 
如果所有的方法都是静态的,那就根本不需要任何实例。有人把这种类叫做工具类,这种做法叫做工具类模式。
工具类模式基本上不需要面向对象的概念。
当然,我不是说面向对象的技术就一定比面向过程的好很多,但是如果你是在使用Java这样的面向对象的语言,设计一个面向对象的系统,那么一个单纯 的想法就是尽量靠近面向对象的概念。我没有见过一个使用Java的人反其道而行之,努力使用面向过程的概念。如果你是面向过程概念的拥护者,不妨选择一个 像Fortran这样的结构化编程语言。
在大多数的情况下,工具类中的方法都描述一些实体,应该把这些方法移动到描述这些实体的类中去。如果没有这些类,那就不妨考虑创建它们。
我曾经见到过一个很大的工具类,都是对String的操作。经过辨认,发现这些操作实际上都是为了组合URL准备的,并不是一般性地针对任何的String。为什么不把它们放到一个CustomizedURL类中去呢?
当你这样做了之后,会发现你并不需要一个很大的工具类,或者根本就可以取消它。
单例模式并不是一个取代工具类模式的好候选人。单例模式的情况在多JVM的J2EE服务器环境中变得很复杂。单例对象一旦创建出来就不会被湮灭,浪费内存。

你可能感兴趣的:(单例模式)