DesignPattern_Java:SingletonPattern

单例模式 SingletonPattern

Ensure a class has only one instance,and provide a global point of access to it.

单例模式的主要作用是确保一个类只有一个实例存在。

懒汉式单例类:第一次引用类时,才进行对象实例化。

package com.DesignPattern.Creational.Singleton;

public class Singleton_lHan {

	private static Singleton_lHan _instance = null;

	private Singleton_lHan() {
	}

	synchronized public static Singleton_lHan getInstance() {
		if (_instance == null) {
			_instance = new Singleton_lHan();
		}
		return _instance;
	}
}

饿汉式单例类:类加载时,就进行对象实例化。

package com.DesignPattern.Creational.Singleton;

public class Singleton_eHan {

	private static Singleton_eHan m_instance = new Singleton_eHan();

	private Singleton_eHan() {
	}

	public static Singleton_eHan getInstance() {
		return m_instance;
	}
}

单例模式的实例

创建一个饿汉式单例类:GlobalNum.java

package com.DesignPattern.Creational.Singleton;

public class GlobalNum {

	private static GlobalNum gn = new GlobalNum();
	private int num = 0;

	public static GlobalNum getInstance() {
		return gn;
	}

	public synchronized int getNum() {
		return ++num;
	}
}

SingleDemo.java

package com.DesignPattern.Creational.Singleton;

public class SingleDemo {

	//测试单例模式
	public static void main(String[] args) {
		//创建线程A
		NumThread threadA = new NumThread("thread A");
		//创建线程B
		NumThread threadB = new NumThread("thread B");
		//启动线程
		threadA.start();
		threadB.start();

	}
}
//线程类
class NumThread extends Thread {

	private String threadName;

	public NumThread(String name) {
		threadName = name;
	}

	//重写线程的run方法(线程任务)
	public void run() {
		GlobalNum gnObj = GlobalNum.getInstance();
		//循环访问,输出访问次数
		for (int i = 0; i < 5; i++) {
			System.out.println(threadName + "第" + gnObj.getNum() + "次访问!");
			try {
				this.sleep(1000);	//线程休眠1000毫秒
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载|Copyright ©2011-2015,Supernatural, All Rights Reserved.

时间: 2024-08-07 22:08:21

DesignPattern_Java:SingletonPattern的相关文章

DesignPattern_Java:Composite Pattern

组合模式 Composite Pattern 合成模式 compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly. 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 抽象构件角色(

DesignPattern_Java:Decorator Pattern

装饰模式 Decorator Pattern Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality. 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更为灵活. 抽象构建角色(Compon

DesignPattern_Java:Prototype Pattern

原型模式 Prototype Pattern Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype. 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. Java内置克隆机制: 实现Cloneable接口 覆盖Object的clone()方法. 抽象原型角色(Prototype):该角色是一个抽象角色,

DesignPattern_Java:Factory Method Pattern

工厂方法模式 Factory Method :(虚拟构造函数模式 Virtual Constructor,多态性工厂模式 Ploymorphic Facoty) Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses. 定义一个创建产品对象

DesignPattern_Java:设计模式分类和设计原则

设计模式分类: 创建型: 单例模式(Singleton Pattern) 工厂方法模式(Factory Pattern) 抽象工厂模式(Abstract Factory) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 结构型: 代理模式(Proxy) 装饰模式(Decorator) 适配器模式(Adapter) 组合模式(Composite) 桥梁模式(Bridge) 外观模式(Facade) 享元模式(Flyweight) 行为型: 模板方法模式

DesignPattern_Java:Proxy Pattern

代理模式 Proxy Pattern 委托模式 Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问. 抽象主题角色(Subject):该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题. package com.DesignPattern.Structural.Proxy; public interface

单例模式★★★★☆

一.什么是单例模式 一个类只有一个全局实例 二.补充说明 一般把其构造方法设为私有,另外提供一个可以获取该实例的静态方法: 由于java存在反射机制,即使是私有构造方法,也能被外部创建,所以一般的写法严格来讲不属于单例模式:(ps:可以在构造方法内加个静态flag标志判断,保证其只能创建一次) 违背了“单一职责原则”,该类既是工厂又是产品(自己创建了自己): 单例模式可以改造成固定大小的多例模式: 三.角色 只有一个角色,就是单例: 四.Java例子 举几个常见的实用的例子 1.在类加载的时候生

Java设计模式之单例模式

Android开发中都会用到的一种最简单的设计模式,尤其是当初的面试中经常被问到的一种设计模式: 第二篇:单例模式 当需要控制一个类的实例只能有一个,而且客户只能从一个全局访问点访问它时,可以选用单例模式. 单例模式有两种:饿汉式与懒汉式. 1.饿汉式: package com.hongri.singletonpattern; /** * 单例模式: * 饿汉式(饿汉式是线程安全的) * @author zhongyao */ public class Singleton2 { private

一、单例模式(Singleton)

单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点.” 特点:一是某个类只能有一个实例: 二是它必须自行创建这个实例: 三是它必须自行向整个系统提供这个实例. 一.经典实现 using System; namespace SingletonPattern { // 经典写法 // sealed 阻止其他类从该类继承 public sealed class ClassicalSample { // 用来保存唯一实例 priva