单例模式 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();
}
}
} }

DesignPattern_Java:SingletonPattern的更多相关文章

  1. SingletonPattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  2. 单例模式(Singleton-Pattern)百媚生

    1 动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号 ...

  3. DesignPattern_Java:Factory Method Pattern

    工厂方法模式 Factory Method :(虚拟构造函数模式 Virtual Constructor,多态性工厂模式 Ploymorphic Facoty) Define an interface ...

  4. SingletonPattern(单例模式)-----Java/.Net

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一. 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的 ...

  5. 创建型-单例模式 SingletonPattern

    单例模式 Singleton 保证一个类只有一个实例的实现方法 给其他类提供一个全局的访问点. 由自己创建自己的唯一实例 实现 实现方法分为饿汉式(线程安全).懒汉式(线程不安全).懒汉式(lock+ ...

  6. [zt]Singleton和Double-Checked Locking设计模式—UML图及代码实现

    Singleton和Double-Checked Locking设计模式,分别指的是单例模式和双重检查锁模式,它们都可以用于确保某个类只有一个对象实例化. 两个模式的区别在于:Singleton模式用 ...

  7. 深入浅出设计模式——单例模式(Singleton Pattern)

    模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号) ...

  8. C#设计模式——单件模式

    一.为何需要单件模式 需求 我们开发了一个大型的项目,其中存在许多的工具类.但是其中很多的工具类我们并不是经常使用得到,甚至 一次都不会使用.但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不 ...

  9. 设计模式之美:Singleton(单件)

    索引 意图 结构 参与者 适用性 缺点 效果 相关模式 实现 实现方式(一):使用 Static 变量初始化 Singleton. 实现方式(二):使用 Lazy Initialization 来实现 ...

随机推荐

  1. iOS关闭键盘简单实现(objc/swift)

    Objective-C 代码实例方式一 [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; 假设一个view上有很多Text ...

  2. unity3d 改动gui label颜色,定义颜色需除以256

    GUIStyle titleStyle2 = new GUIStyle(); titleStyle2.fontSize = 20; titleStyle2.normal.textColor = new ...

  3. domino web app

         近期在做个项目内容是:原企业的OA仅仅能在电脑桌面处理流程,不能在手机上处理审核功能,但随着企业需求,管理者需求在随时使用手机审核文档,达到及时处理文档及流程的及时性.      要求:1) ...

  4. fromCharCode vs chr

    fromCharCode vs chr echo off set "fn=%*" set php=d:/www/php5/php.exe cls echo. %php% %fn% ...

  5. elasticsearch节点间通信的基础transport

    在前一篇中我们分析了cluster的一些元素.接下来的章节会对cluster的运作机制做详细分析.本节先分析一些transport,它是cluster间通信的基础.它有两种实现,一种是基于netty实 ...

  6. 117.C语言实现桌面输出图片,桌面输出文字,桌面画线

    通过获取窗口句柄,然后获取窗口DC,然后画图 #include <Windows.h> #include <stdio.h> //桌面画线 void drawLine() { ...

  7. 前端面试题(VUE)

    (前端面试题大全,持续更新) vue:v-model 双向绑定的原理 依赖收集 虚拟DOM的作用 vue@3.0中的preset配置? 父组件A和其子组件B/子组件C,B/C进行通信的方式(怎么通信) ...

  8. 有关Canvas的一点小事—canvas数据和像素点

    1.  canvas生成base64数据 canvas.toDataURL()生成的数据可以直接给image对象使用作为<img>显示在前端,也可以传给后台生成图片保存.前端生成保存图片的 ...

  9. Android 撕衣服(刮刮乐游戏)

    项目简单介绍: 该项目为撕衣服,相似刮刮乐游戏 具体介绍: 用户启动项目后.载入一张图片,当用户点击图片的时候,点击的一片区域就会消失.从而显示出在这张图片以下的图片 这个小游戏相似与刮奖一样,刮开涂 ...

  10. 基于ContentObserver来动态取消或加入屏幕超时任务

    前面也说了.ContentObserver能够来监控数据库里某一项数据的变化,当然也能够同一时候监控多个数据项的变化. 笔者在项目中须要改动到屏幕超时的需求,比方在车载业务中,倒车事件发生的时候,是不 ...