`

2011-5-6漫谈设计模式(单例模式)

阅读更多
1.最简单的单例模式:

package com.singleton;
/**这是最简单的单例模式,实现的效果的是在一个jvm中只有一个实例
 * 类在加载的时候静态变量只会初始化一次。
 * 1.这种模式的问题在于不能够延迟加载,当SimpleSingleton加载到内存的时候
 * 实例就会自动生成,不能够延迟加载
  *
 */
public class SimpleSingleton {
	private SimpleSingleton(){};
	private static SimpleSingleton instance=new SimpleSingleton();
	public static SimpleSingleton getInstance()
	{
		return instance;
	}
	public static void main(String[] args)
	{
		SimpleSingleton s1=SimpleSingleton.getInstance();
		SimpleSingleton s2=SimpleSingleton.getInstance();
		System.out.println(s1==s1);
		System.out.println(s1.equals(s2));
		
	}

}


2.线程不安全的单例模式

package com.singleton;
/**
 * 这里实现了延迟加载的目的,但是却不是线程安全的
 * 原因主要在于两个线程同时到判断是否为null的时候
 * 可能一起创建实例
 * @author Administrator
 *
 */
public class UnThreadSingleton {
	private static UnThreadSingleton instance;
	public static UnThreadSingleton getInstance()
	{
		if(instance==null)
		{
			instance=new UnThreadSingleton();
		}
		return instance;
	}

	public static void main(String[] args)
	{
		UnThreadSingleton s1=UnThreadSingleton.getInstance();
		UnThreadSingleton s2=UnThreadSingleton.getInstance();
		System.out.println(s1==s2);
	}
}


3.线程安全的单例模式

package com.singleton;

public class ThreadSingleton {
	public static ThreadSingleton instance;
	public static ThreadSingleton  getInstance()
	{
		if(instance==null)
			synchronized(ThreadSingleton.class){
		if(instance==null)
		{
			instance=new ThreadSingleton();
		}
	}
	return instance;
	}
public static void main(String[] args)
{
	ThreadSingleton t1=ThreadSingleton.getInstance();
	ThreadSingleton t2=ThreadSingleton.getInstance();
	System.out.println(t1==t2);
	
}
	
}


4.内部类单例模式

package com.singleton;

public class LazyLoadSingleton {
	private static class LazyHolder
	{
		private static LazyLoadSingleton singletonInstance=new LazyLoadSingleton();
	}
	public static LazyLoadSingleton getInstance()
	{
		return LazyHolder.singletonInstance;
	}
	public static void main(String[] args)
	{
		LazyLoadSingleton l1=LazyLoadSingleton.getInstance();
		LazyLoadSingleton l2=LazyLoadSingleton.getInstance();
		System.out.println(l1==l2);
	}
}
分享到:
评论

相关推荐

    漫谈设计模式-从面向对象开始

    1. 创建型模式:涉及对象实例化的设计模式,主要有单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式等。这些模式提供了更加灵活的方式来创建对象。 2. 结构型模式:描述如何组合类和对象以获得更大的...

    漫谈设计模式代码

    《漫谈设计模式》这本书深入浅出地介绍了多种设计模式,通过代码实例帮助读者理解和应用这些模式。在这个压缩包“ramblingonpatterns-1.0”中,你将找到书中的代码示例,它们覆盖了各个章节的关键知识点。 1. **...

    漫谈设计模式.rar

    《漫谈设计模式》这本书以其独特的视角深入浅出地探讨了这一主题,尤其针对Java语言进行了详尽的阐述。在这个压缩包中,包含的文件“漫谈设计模式”可能是该书的电子版或者相关的学习资料。 设计模式的核心在于提高...

    《漫谈设计模式》—Java设计模式的好帮手

    《漫谈设计模式》是一本专为Java开发者深入理解设计模式而编写的书籍。设计模式是软件工程中的一种最佳实践,它们是针对常见问题的解决方案,经过时间和实践的考验,被广泛接受并应用于各种项目中。这本书对于提升...

    漫谈设计模式

    《漫谈设计模式》这本书是IT领域中关于软件设计的经典之作,主要涵盖了设计模式的核心概念以及在实际开发中的应用。设计模式是经验丰富的开发者在解决常见问题时形成的一套最佳实践,它们为软件设计提供了可复用的...

    灸哥讲解创建型设计模式

    下面将逐一解析五个常见的创建型设计模式:单例模式、原型模式、工厂模式、抽象工厂模式以及建造者模式。 1. **单例模式** - 单例模式是一种限制类实例化次数为一次的设计模式,确保一个类只有一个实例,并提供...

    设计模式 pdf

    《漫谈设计模式》这本书是IT领域中关于软件设计的经典之作,主要涵盖了设计模式的核心概念和实际应用。设计模式是经过长期实践证明的在特定情境下解决软件设计问题的通用可复用方案,它们是软件工程中的智慧结晶,...

    架构模式与实践漫谈.pdf

    整体来看,架构模式与实践漫谈通过讨论架构原则、具体模式和实践案例,向我们展示了一个系统架构设计的整体视角。在构建大规模的互联网应用时,这些原则和模式至关重要,它们是系统能否成功应对不断变化需求和挑战的...

    [NET 4.0面向对象编程漫谈 应用篇].金旭亮---高清版.pdf

    常见的设计模式有工厂模式、单例模式、策略模式、观察者模式等。学习和应用这些设计模式可以让开发者编写出更可维护、可扩展和灵活的代码。 作者金旭亮在书中通过丰富的实例和案例分析,探讨了如何在.NET 4.0环境下...

    Java安全漫谈 - 02.反射篇(2)1

    单例模式是一种常用的设计模式,保证一个类只有一个实例,并提供全局访问点。例如,`Runtime.getRuntime()` 是获取 `Runtime` 类唯一实例的静态方法。在上述的命令执行场景中,正确的做法是通过 `getMethod()` 获取 ...

    开发框架漫谈.rar

    例如,工厂模式用于创建对象,单例模式确保类只有一个实例,观察者模式用于实现事件驱动编程。框架往往内置了一些设计模式,使得开发者能够遵循最佳实践。 接下来,我们讨论作者研究过的七个开发框架。虽然具体框架...

    《匠人手记》网络版《程序规划方法漫谈》.pdf

    2. **设计模式**:介绍常见的设计模式,如工厂模式、单例模式、观察者模式等,这些都是软件设计中的经典解决方案,能提升代码的可维护性和可扩展性。 3. **模块化与分层架构**:讲解如何将复杂系统分解为可管理的...

    net 4.0面向对象编程漫谈

    1. 设计模式:.NET 4.0中的面向对象编程常结合设计模式,如单例模式、工厂模式、装饰器模式、观察者模式等,它们是解决常见问题的最佳实践。 2. LINQ(Language Integrated Query):LINQ是.NET 4.0引入的重要特性...

    灸哥讲设计么:为什么学?怎么学 & 软件设计七原则解读

    在实际项目中,你可以结合设计模式,如工厂模式、单例模式、观察者模式、装饰器模式等,来解决具体问题。 总之,学习设计模式和设计原则是提升软件开发技能的重要步骤。通过刻意练习、实战演练和逐步演进来深入理解...

    Java工程师新人入门书籍推荐

    - 《漫谈设计模式:从面向对象开始》:介绍了设计模式,对于软件设计至关重要,尤其是单例、工厂和代理模式。 - 《Spring 3.0就这么简单》:适合初学者快速掌握Spring框架的入门书籍。 - 《Java并发编程实战》:...

    rambling-on-design-patterns

    本书《设计模式漫谈》可能涵盖了以下一些关键的设计模式: 1. **创建型模式**:这类模式主要关注对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者...

Global site tag (gtag.js) - Google Analytics