Pattern-No.07 设计模式之单例模式

1、确保一个类只有一个实例,并提供一个全局的访问点

2、饱汉式单例实现

package com.shma.singleton;

/**
 * 饱汉式单例实现
 * @author admin
 *
 */
public class Singleton01 {

	private static Singleton01 uniqueInstance = new Singleton01();

	private Singleton01() {

	}

	public static Singleton01 getInstance() {
		return uniqueInstance;
	} 
}

3、饿汉式单例实现

package com.shma.singleton;

/**
 * 饿汉式单例双锁机制
 * @author admin
 *
 */
public class Singleton02 {

	private volatile static Singleton02 uniqueInstance = null;

	private Singleton02() {

	}

	public static Singleton02 getInstance() {
		if(uniqueInstance == null) {
			synchronized (Singleton02.class) {
				if(uniqueInstance == null) {
					uniqueInstance = new Singleton02();
				}
			}
		}

		return uniqueInstance;
	}
}

4、实现巧克力锅炉类,巧克力锅炉是一个单例类

package com.shma.singleton.chocolate;

/**
 * 巧克力加工锅炉类
 * @author admin
 *
 */
public class ChocolateBoiler {

	//记录锅炉内原料是否为空
	private boolean empty = false;

	//记录锅炉内原料是否煮沸
	private boolean boiled = false;

	private volatile static ChocolateBoiler uniqueInstance = null;

	private ChocolateBoiler() {

	}

	public static ChocolateBoiler getInstance() {
		if(uniqueInstance == null) {
			synchronized (ChocolateBoiler.class) {
				if(uniqueInstance == null) {
					uniqueInstance = new ChocolateBoiler();
				}
			}
		}

		System.out.println("Returning instance of Chocolate Boiler");
		return uniqueInstance;
	}

	/**
	 * 装满锅炉
	 * 原料为空
	 */
	public void fill() {
		if (isEmpty()) {
			empty = false;
			boiled = false;
			// fill the boiler with a milk/chocolate mixture
		}
	}
 
	/**
	 * 排出成品
	 * 原料不能为空并且已经被煮沸
	 */
	public void drain() {
		if (!isEmpty() && isBoiled()) {
			// drain the boiled milk and chocolate
			empty = true;
		}
	}
 
	/**
	 * 煮沸方法
	 * 条件是锅炉原料不能为空并且没有被煮沸过
	 */
	public void boil() {
		if (!isEmpty() && !isBoiled()) {
			// bring the contents to a boil
			boiled = true;
		}
	}
  
	public boolean isEmpty() {
		return empty;
	}
 
	public boolean isBoiled() {
		return boiled;
	}
}

package com.shma.singleton.chocolate;

public class ChocolateController {

	public static void main(String[] args) {
		ChocolateBoiler boiler = ChocolateBoiler.getInstance();

		//装入原料
		boiler.fill();
		//煮沸
		boiler.boil();
		//排出
		boiler.drain();

		// will return the existing instance
		ChocolateBoiler boiler2 = ChocolateBoiler.getInstance();
	}
}
时间: 2024-10-31 21:05:15

Pattern-No.07 设计模式之单例模式的相关文章

java设计模式之单例模式(Singleton pattern)

java设计模式之单例模式(Singleton pattern) 单例模式的定义: Singleton pattern restricts the instantiation of a class and ensures that only one instance of the class exists in the java virtual machine. The singleton class must provide a global access point to get the i

C#设计模式之一单例模式(Singleton Pattern)【创建型】

原文:C#设计模式之一单例模式(Singleton Pattern)[创建型] 一.引言 看了李建忠老师的讲的设计模式已经有一段时间了(这段时间大概有一年多了),自己还没有写过自己的.有关设计模式的文章.这次想写一些关于设计模式的文章,用自己的理解和代码来写,算是复习一遍.写作的过程中也会多看看其他大牛的文章,争取让自己的理解正确,否则把大家带跑偏了,就是我的过错了.今天就开始我们第一个设计模式,该模式是:[单例模式],英文名称:Singleton Pattern,这个模式很简单,一个类型只需要

二十四种设计模式:单例模式(Singleton Pattern)

单例模式(Singleton Pattern) 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例保证一个类仅有一个实例. Singleton using System; using System.Collections.Generic; using System.Text; namespace Pattern.Singleton { /// <summary> /// 泛型实现单例模式 /// </summary> /// <typeparam name=&q

设计模式之单例模式20170711

创建型设计模式之单例模式 一.含义 在一个进程或者线程里,对于一个类只有一个实例化对象,即内存中只有一个实例化对象 二.代码说明 由于是单例模式,只有一个对象,所以该类内部都是静态常量和静态方法, 具体来说,因为只有一个对象不能创建多个对象,创建对象就没什么意义了(直接用类表示对象即一个类就是一个对象),所以类内部都是静态的,不需创建就可使用(而且由于是静态的也确保每次调用都是属于类的内存空间,即只占一份内存空间也就是一个对象的内存空间) 在用C实现过程中也是参考这种思想,直接构造一个类的对象

常见的设计模式:单例模式、工厂模式、观察者模式、装饰模式与适配器模式

常见的设计模式:单例模式.工厂模式.观察者模式.装饰模式与适配器模式 这里可以阅读Terry Lee的设计模式系列来理解学习一下 1.4.1 单例模式 .NET设计模式(2):单件模式(Singleton Pattern)  http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 1.4.2 抽象工厂模式 .NET设计模式(3):抽象工厂模式(Abstract Factory) http://terrylee.cnblogs.com/

Java设计模式:单例模式

概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能

[转]JAVA设计模式之单例模式

原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话

设计模式 之 单例模式

单例模式思路: 私有化构造方法: 防止实例化 私有化克隆方法: 防止克隆 私有化静态属性: 保存对象 公有化静态方法: 获取对象 代码: <?php //设计模式:单例模式 class Singleton { //私有化静态属性:用于保存对象 private static $obj; //私有化构造方法 private function __construct(){} //公有化静态方法:用于实例化对象 public static function getObj() { //判断对象是否存在 i

设计模式实例学习-单例模式(Android中的使用场景)

1.设计模式实例-单例模式 单例模式,故名思议,是指在一个类中通过设置静态使得其仅创造一个唯一的实例.这样设置的目的是满足开发者的希望--这个类只需要被实例化创建一次,同时因为其为静态的缘故,加载的速度也应该快于正常实例化一个类的速度(理论上). 在Android开发中,当我们需要创建一个Fragment的时候常常会用到这样的模式,没有代码的学习是虚无的,接下来亮代码学习: public class SelectFrame extends Fragment { private final sta