`
sunnylocus
  • 浏览: 875766 次
  • 性别: Icon_minigender_1
  • 来自: 美国图森
社区版块
存档分类
最新评论

Java设计模式—单态模式(Singleton)

    博客分类:
  • Java
阅读更多

  单态模式(也有叫单例模式)表示一个类只有一个实例存在,生成用单态模式设计类不能用new 关键字来获得。可用简单的一句话来概括单态模式:

      构造方法私有化,通过共有的静态方法返回类的实例。

    最近在项目开发中,程序用到的各个参数被单独拿出来做成一个配置文件,程序接收到用户的定位请求就从配置文件读取出对应的参数和客户端中请求的参数比对,然后把定位请求发送到不同的定位平台,但问题来了,每次读取文件就要new 一个文件对象,而定位请求每秒可能有几个至几十个,频繁的文件读取导致服务器性能下降(读取文件,要生成文件对象,打开文件流,读取,关闭文件流)。就种情况就要用到单态模式,程序一启动就生成唯一的一个文件对象,这样每次读取文件不再与文件物理的建立I/O流,直接从内存中读取即可。

1.单态类(懒汉式单态类)

package com.sunnylocus.singleton;

import java.io.File;

public class Singleton {
	private static Singleton instance;
	private static File configFile;
	private Singleton() { //构造方法私有化
	}
	/** 获得配置文件对象*/
	public File getConfigFile() {
		return configFile;
	}
	/** 获得Singleton类的实例*/
	public static synchronized Singleton getInstance() {//通过公有的静态方法返回类的实例
		if(instance == null) {
			configFile = new File("src/com/sunnylocus/singleton/locationConfig.xml"); 
			instance = new Singleton();
		}
		
		return instance;
	}
}

 

2.Test

package com.sunnylocus.singleton;

import java.io.File;

public class Main {
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		
		if(s1 == s2) { //比较地址
			System.out.println("s1和s2是同一个对象的实例");
		}
		else {
			System.out.println("s1和s2不是同一个对象的实例");
		}
		
		File f1 = s1.getConfigFile();
		File f2 = s1.getConfigFile();
		if(f1 == f2) {
			System.out.println("来自同一个文件对象");
		}
		else {
			System.out.println("不是来自同一个文件对象");
		}
	}
}

 

3.output:

 

s1和s2是同一个对象的实例
来自同一个文件对象

 

 

二、饿汉式单态类

public class TestSingleton {
	private static final TestSingleton instance = new TestSingleton();
	
	private TestSingleton() {
	}
	/** 静态工厂方法*/
	public static TestSingleton getInstance() {
		return instance;
	}
}

 

 

 

 

 

 

 

3
2
分享到:
评论
5 楼 cocoy2006 2010-11-04  
方法加synchronized ,效率有点低
4 楼 sunnylocus 2010-07-14  
superwind 写道
你这个单态多线程情况下会出问题

谢谢提醒,在多线程环境下getInstance()方法需要加同步控制
3 楼 superwind 2010-07-13  
你这个单态多线程情况下会出问题
2 楼 sunnylocus 2009-03-01  
lyhngu 写道

你这单态有问题

请赐教
1 楼 lyhngu 2009-02-27  
你这单态有问题

相关推荐

    Java中单态设计模式

    ### Java中单态设计模式详解 #### 一、引言 设计模式是在长期软件开发过程中提炼出来的最佳实践,它们提供了一种标准化的方式用于解决特定类型的问题。对于Java开发者而言,熟悉并掌握各种设计模式是非常重要的,...

    JAVA设计模式(单态模式和简单工厂模式)

    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于...

    Java设计模式之单态模式(Singleton模式)介绍

    单态模式(Singleton模式)是Java设计模式中的一种,它的主要目标是确保一个类在整个应用程序中只有一个实例存在。这种模式的应用场景广泛,特别是在需要全局共享的资源管理、配置中心、日志服务等场合非常常见。 ...

    JAVA设计模式chm文档

    设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...

    设计模式之Singleton(单态)

    **设计模式之Singleton(单态)** Singleton设计模式是一种创建型设计模式,它的核心目标是确保在应用程序中只有一个类的实例,并提供一个全局访问点来获取这个唯一实例。这种模式在资源管理、缓存、日志记录、线程池...

    Java实现的单态登陆

    在IT行业中,单态登录(Singleton Login)是一种常见的设计模式,尤其在Web应用程序开发中,用于确保用户在系统内只需登录一次,即可访问多个相互关联的子系统或应用,无需重复登录。本篇将深入探讨Java如何实现单态...

    java设计模式教程+源代码

    Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享...

    自己整理的java设计模式模式(袖珍版的哦)

    为了更好的网络共享 本人发布的资源一律免费 如有哪个收费了 请告知! 压缩包 包括常用的几种模式: 设计模式的原则 设计模式袖珍版之-Decorator(油漆工) ...设计模式袖珍版之-Singleton(单态) 设计模式袖珍版之-Visitor

    java设计模式-图解-附代码

    ### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...

    JAVA设计模式23种

    设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式...

    Java中23种设计模式(个人整理实用).doc

    Java 设计模式详解 Java 设计模式是软件开发过程中的一种解决方案,旨在提高软件的可维护性、灵活性和可扩展性。设计模式是一种已经证实的、通用的解决方案,可以应用于不同的问题领域。下面是 Java 中 23 种设计...

    单态模式(代码)

    单态模式(Singleton Pattern)是软件设计模式中的一种,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、缓存管理和日志记录等,因为它可以确保在整个系统中...

    设计模式一点通之单态模式

    单态模式(Singleton Pattern)是设计模式中的一种基础模式,主要用来确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,当一个类只能有一个实例而且客户可以从一个众所周知的访问点访问它时,这样的...

    23种Java设计模式

    Java设计模式是其中的佼佼者,它广泛应用在Java编程语言开发的项目中。根据使用场景和目的,Java设计模式大致可以分为三类:创建模式、结构模式和行为模式。下面,我们将详细介绍这三类设计模式中包含的具体模式,并...

    23种java设计模式

    Factory(工厂模式)、Singleton(单态)、Builder(建造者模式)、Prototype(原型模式)、工厂方法模式。2、结构模式:Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器...

    单态模式(PPT)

    单态模式,是一种常用的软件设计模式,其核心思想是确保一个类在整个应用程序中只有一个实例,并提供全局访问点。这种模式的出现主要是为了解决对象创建的控制问题,特别是在某些需要频繁创建和销毁的对象中,单态...

    java23种设计模式.docx

    Java 23 种设计模式 Java 23 种设计模式是 Java 中最常用的设计模式,总共可以分为三种:创建模式、结构模式和行为模式。创建模式包括 Factory(工厂模式)、Singleton(单态)、Builder(建造者模式)、Prototype...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    Java的23种设计模式疯狂Java总结个人修改增强版.pdf

    Java的23种设计模式分为三大类:创建型、结构型和行为型。这些模式有助于提高代码的可读性、可维护性和可扩展性,是任何Java开发者必备的知识。 1. **创建型模式**: - **工厂方法(FactoryMethod)**:定义一个...

    JAVA设计模式之创造型模式介绍.doc

    在JAVA设计模式中,创造型模式包括工厂方法、抽象工厂、创造者模式、单态模式、原型模式等五类。 一、工厂方法模式 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的...

Global site tag (gtag.js) - Google Analytics