`
spacefly
  • 浏览: 277946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单例模式-简单示范

    博客分类:
  • java
阅读更多

======
所谓单例模式
======

即项目中某个类,只生成1个实例,并且同时只能被一个调用;

 

======
实现单例模式
======
* 创建单例类;
* 所有的构造方法都是private的,即不允许在类外创建对象;
* 类内部创建一个static的对象;
* 用static初始化块来初始化static对象;
* 提供 public static synchronized 的方法返回static对象,提供给其它类调用;

 

下面是一个简单的单例模式,假设打印机只有1个,且同时只能被1个客户调用1次!:

package space.learn.designPattern.singleton;

/**
 * 单例模式,打印机
 * @author space
 * @date Oct 31, 2008 11:00:36 PM
 */
public class Printer {
	/**
	 * 默认构造函数是private类型,并且不提供其它非private构造函数,从而禁止了其它类中生成该类的实例;
	 * 也就是说这个类的对象只能在该类中创建,并提供给其它类使用;
	 */
	private Printer() {}

	/** 对象声明成static,从而只有一个实例,并且可以在不创建对象的情况下被调用 */
	private static Printer printer = null;
	/** 静态初始化块,来初始化这个唯一的对象,并判断是否初始化成功 */
	static {
		printer = new Printer();
		// 其它的初始化内容;
		if (printer == null) { throw new RuntimeException("Printer init failed!"); }
	}

	/** 
	 * 静态的 synchronized 方法,用于获得printer,这样同时就只能有1个线程获得这个唯一的实例;  
	 */
	public static synchronized Printer getPrinter() {
		return printer;
	}
}

  

 

======

 灵活运用

======

其实呢,单例模式不一定非得这么严格的限制,概念毕竟只是概念,具体怎么写,具体到底控制到什么程度,还得根据你自己的应用需求来,比如我建立一个DBCP的数据源,只想有1个连接池,那么就不能用 synchronized 了,很多线程都将调用这个连接池,所以还是掌握了基本思想后,根据你的应用,自己合理的设计!!!

 

这些概念本来就是从实践中来的,也必须放到实践和具体应用中去,没看过“设计模式”只要你的思维好,基础好,一样能自己想出这些设计模式!!!

 

分享到:
评论

相关推荐

    单例模式---初学 优点--缺点

    单例模式是软件设计模式中的一种经典模式,主要用于限制类的实例化,确保在整个应用程序中,该类只有一个实例存在。这种模式在很多场景下都非常有用,例如管理共享资源、全局配置或者提供一个全局访问点等。 单例...

    单例模式--只能弹出一个窗体

    单例模式--只能弹出一个窗体 只能弹出一个窗体

    单例模式----数据库连接池管理类的应用

    单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在IT行业中,尤其是在处理资源密集型任务如数据库连接时,单例模式被广泛应用。数据库连接池就是这种应用的一个典型例子。 ...

    多线程并发下的单例模式-源码

    该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...

    设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)

    在Python中,实现单例模式相对简单,因为Python的全局作用域特性使得类实例化后可以全局共享。以下是一个基本的Python单例模式实现: ```python class Singleton(object): _instance = None def __new__(cls, *...

    单例模式-ARC

    单例模式是一种设计模式,它在软件工程中用于确保一个类只有一个实例,并提供全局访问点。这个模式在很多场景下非常有用,比如管理共享资源、配置设置或者在整个应用程序中创建一致性的日志服务。在iOS开发中,由于...

    单例模式-----<ant求职记之设计模式>

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java或C#等面向对象的语言中,单例模式广泛用于控制资源的共享,比如数据库连接、线程池或者配置文件的读取等。这种...

    IOS应用源码Demo-单例模式-毕设学习.zip

    在iOS应用开发中,单例模式是一种常用的编程设计模式,它确保了类只有一个实例,并提供一个全局访问点。这个模式在iOS开发中的应用非常广泛,特别是在处理系统资源、网络请求、数据存储等需要全局共享的对象时。在...

    2 单例模式-MOOC课程内容.pdf

    单例模式是软件设计模式中的一种,属于创建型模式,但有时被称作“非创建型模式”。在单例模式中,设计者的目标是确保一个类只有一个实例,并且提供一个全局访问点给这个实例。在多线程和并发环境中,单例模式的实现...

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    在Java中,有多种实现单例模式的方法,包括简单实现、双重检查锁定(Double-Checked Locking)、静态内部类和枚举类。下面我们将详细探讨这些不同的实现方式。 1. **简单实现(非线程安全)** 最简单的单例实现...

    单例模式-基本代码.rar_C++_Hikvision

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。在C++中实现单例模式有多种方法,包括懒汉式、饿汉式、双重检查锁定等。这里我们将讨论这些方法,并结合...

    2 单例模式-课程内容.rar

    单例模式是软件设计模式中的一种经典模式,它主要用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式在处理全局资源、线程共享对象以及需要频繁创建和销毁的对象时非常有用,可以减少...

    java实现单例模式-双重校验锁模式(线程安全)

    双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。

    java实现单例模式-饿汉模式(线程安全)

    饿汉模式在类加载时就创建了实例

    java实现单例模式-懒汉模式(线程不安全

    懒汉模式是延迟加载的方式,在首次调用getInstance()方法时才会创建实例;

    java实现单例模式-静态内部类模式(线程安全)

    静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。

    java实现单例模式-懒汉模式(线程安全,使用synchronized关键字)

    线程安全,使用synchronized关键字

    C++设计模式-单例模式

    李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。

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

    单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、管理复杂的初始化过程以及在系统中创建一个全局的配置对象等。 单例模式分为两种...

Global site tag (gtag.js) - Google Analytics