`
wwwzhouhui
  • 浏览: 361097 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 设计模式之——单列模式

阅读更多

一、什么是单例模式:
   单例模式确保某一个类只有一个实例,而且向这个系统提供这个实例。
二、单例模式的要点:
    1、某个类只能有一个实例
    2、它必须自行创建这个实例
    3、必须自行向这个系统提供这个实例

 

举例:饿汉式单例类

 

package design.Singleton;
/***********************************************************************   
 *   
 *   Singleton2.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Jan 26, 2010   4:34:51 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Singleton2 {
	private static Singleton2 singleton2 = new Singleton2();
	
	private Singleton2(){
		
	}
	public static Singleton2 getInstance(){
		return singleton2;
	}

}

   2:懒汉式单利类

 

package design.Singleton;
/***********************************************************************   
 *   
 *   Singleton1.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Jan 26, 2010   4:32:04 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Singleton1 {
	private static  Singleton1 ingleton1;
	private Singleton1(){
		
	}
	public static synchronized Singleton1 getInstance(){
		if(null==ingleton1){
			ingleton1= new Singleton1();
		}
		return ingleton1;
	}

}

  3:同步安全单列类

 

package design.Singleton;

/***********************************************************************   
 *   
 *   Singleton3.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Jan 26, 2010   4:36:34 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Singleton3 {
	private static Singleton3 singleton3;

	private Singleton3() {

	}

	public static synchronized Singleton3 getInstance() {
		if (null == singleton3) {
			synchronized (Singleton3.class) {
				if (null == singleton3) {
					singleton3 = new Singleton3();
				}
			}
		}
		return singleton3;
	}
}

 下面用测试代码说明 只创建一个类

   Message (辅助类)

 

package design.Singleton;
/***********************************************************************   
 *   
 *   Message.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Jan 26, 2010   4:47:32 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Message {
	private String  str;

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}

}

    测试类

 

package design.Singleton;

import java.util.ArrayList;
import java.util.List;

/***********************************************************************   
 *   
 *   test.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Jan 26, 2010   4:39:48 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<Singleton3> list = new ArrayList<Singleton3>();
		for (int i=0;i<5;i++){
			Singleton3 s1=Singleton3.getInstance();
			if(!list.contains(s1)){
				list.add(s1);
			}
		}
		List<Message> list2 = new ArrayList<Message>();
		for (int i=0;i<5;i++){
			Message m= new Message();
			if(!list2.contains(m)){
			list2.add(m);
			}
		}
		System.out.println("size"+list.size());
		for (Singleton3 s:list){
			System.out.println("hashcode"+s.hashCode());
		}
		System.out.println("size2"+list2.size());
		for (Message s:list2){
			System.out.println("hashcode2"+s.hashCode());
		}
	}

}

    测试结果分析Singleton3 只创建一个类  list 个数只有一个(如果放开代码 if(!list.contains(s1)){ )显示hashcode 值相同 而Message 创建5个对象 list个数为5个 hashcode值分别不相同。

    所以 单列类只创建一个实例

分享到:
评论

相关推荐

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

    java 设计模式(列如:单列,工厂,桥梁,===)

    Java设计模式是面向对象编程中的一种最佳实践,它是一套被广泛接受并应用于解决常见问题的解决方案。设计模式并不是特定的代码或库,而是一种在特定情境下如何组织和构建软件组件的经验总结。它们提供了在Java或其他...

    设计模式之单例模式

    单例模式是软件设计模式中的一种基础模式,它在Java编程中被广泛应用。单例模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式可以有效地控制资源的使用,限制实例的数量,提高性能,尤其是在...

    设计模式(抽象模式·工厂模式·代理模式·单列模式·)

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。本资料包包含的是四种重要的设计模式:抽象模式、工厂模式、代理模式和单例模式。 1. 抽象模式: 抽象模式...

    Qt单例设计模式(1-8)

    在软件开发中,设计模式是一种在特定情境下解决常见问题的经验总结,被广泛应用于各种编程语言中。在Qt框架中,单例设计模式是一种经常被用到的设计模式,它确保一个类只有一个实例,并提供全局访问点。这个模式在...

    基于Java设计的简单便签app【100011113】

    实现一个简单的便签软件主界面实现双视图预览——单列显示、瀑布流显示主界面可以对文本进行批量删除、加锁、按文本内容搜索等功能主界面可以将本地数据库同步到云端服务器的数据库上,也可以拉取云端服务器的数据库...

    设计模式之单例模式.md

    设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助

    IOS设计模式全解析与Objective-C编程之道之 .pdf.zip

    iOS 设计模式,文字通过代码与例子,清晰的讲解了设计模式:工厂模式、单列、接口适配、桥接、中介者、观察者、抽象集合、迭代器、行为扩展、算法封装、责任链、装饰、访问者、模板方法、命令、性能与对象访问、代理...

    Java泛型实例

    - 泛型结合多态可以创建强大的设计模式,如工厂方法和策略模式,使代码更加灵活且易于扩展。 8. 野指针问题 - 泛型可以防止“野指针”问题,即在没有类型检查的情况下将错误的对象类型赋值给变量。 9. 类型推断 ...

    单列模式用例

    单列模式(Singleton Pattern)是设计模式中的一种经典模式,主要用来确保一个类只有一个实例,并提供一个全局访问点。这种模式常被用于控制资源的共享,例如配置管理、线程池或者数据库连接池等场景。在Java编程...

    基于Java实现的简单便签app设计.zip

    实现一个简单的便签软件主界面实现双视图预览——单列显示、瀑布流显示主界面可以对文本进行批量删除、加锁、按文本内容搜索等功能主界面可以将本地数据库同步到云端服务器的数据库上,也可以拉取云端服务器的数据库...

    单例模式详解

    单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细介绍。 单例模式...

    c#设计模式之单例模式的实现方式

    单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源 单例模式无论是在实际开发中还是在软件应用中比较常见,...

    C#单列模式

    单例模式是软件设计模式中的一种经典模式,它在C#编程中被广泛使用,尤其在需要确保一个类只有一个实例并且提供全局访问点时。单例模式的主要目标是控制类的实例化过程,保证在整个应用程序运行期间,该类只创建一个...

    Java的单例设计模式详解

    总结来说,Java中的单例设计模式有多种实现策略,开发者需要根据实际需求平衡性能和线程安全。懒汉式适合资源消耗不大的情况,但在多线程环境下需要同步;饿汉式适合对性能要求较高且对象创建开销不大的场景;而双重...

    单列模式详解

    综上所述,单例模式通过限制类的实例化次数为一次,提供了对单一实例的全局访问,是软件开发中常见的设计模式之一。不同的实现方式各有优缺点,开发者应根据具体的应用场景和需求选择最合适的实现策略。

    单例模式的几种实现方式demo

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、缓存管理、线程池等。下面我们将深入探讨单例模式的几种实现...

Global site tag (gtag.js) - Google Analytics