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();
}
}
}
}
DesignPattern_Java:SingletonPattern的更多相关文章
- SingletonPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- 单例模式(Singleton-Pattern)百媚生
1 动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号 ...
- DesignPattern_Java:Factory Method Pattern
工厂方法模式 Factory Method :(虚拟构造函数模式 Virtual Constructor,多态性工厂模式 Ploymorphic Facoty) Define an interface ...
- SingletonPattern(单例模式)-----Java/.Net
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一. 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的 ...
- 创建型-单例模式 SingletonPattern
单例模式 Singleton 保证一个类只有一个实例的实现方法 给其他类提供一个全局的访问点. 由自己创建自己的唯一实例 实现 实现方法分为饿汉式(线程安全).懒汉式(线程不安全).懒汉式(lock+ ...
- [zt]Singleton和Double-Checked Locking设计模式—UML图及代码实现
Singleton和Double-Checked Locking设计模式,分别指的是单例模式和双重检查锁模式,它们都可以用于确保某个类只有一个对象实例化. 两个模式的区别在于:Singleton模式用 ...
- 深入浅出设计模式——单例模式(Singleton Pattern)
模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号) ...
- C#设计模式——单件模式
一.为何需要单件模式 需求 我们开发了一个大型的项目,其中存在许多的工具类.但是其中很多的工具类我们并不是经常使用得到,甚至 一次都不会使用.但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不 ...
- 设计模式之美:Singleton(单件)
索引 意图 结构 参与者 适用性 缺点 效果 相关模式 实现 实现方式(一):使用 Static 变量初始化 Singleton. 实现方式(二):使用 Lazy Initialization 来实现 ...
随机推荐
- Qt 图片浏览器 实现图片的放大缩小翻转等功能
图片的功能 源码: wiget.h #ifndef WIDGET_H #define WIDGET_H #include <QPixmap> #include <QImage> ...
- 报错 关于python的x和y不等长
ValueError: shape mismatch: objects cannot be broadcast to a single shape 这个错误可能是因为传入的两个参数数据长度不一样,比如 ...
- 原生js大总结五
041.在js中如何用方法将10进制的字符转换成16进制和8进制 数字.toString(16) 数字.toString(8) 042.如何创建时间对象 new Date() 04 ...
- [Ramda] Simple log function for debugging Compose function / Using R.tap for logging
const log = function(x){ console.log(x); return x; } const get = R.curry(function(prop, obj){ return ...
- 画pcb时丝印不能再焊盘上
上图中U3就在焊盘上,这样印出来U3显示不全
- C++卷积神经网络实例:tiny_cnn代码具体解释(8)——partial_connected_layer层结构类分析(上)
在之前的博文中我们已经将顶层的网络结构都介绍完毕,包括卷积层.下採样层.全连接层,在这篇博文中主要有两个任务.一是总体贯通一下卷积神经网络在对图像进行卷积处理的整个流程,二是继续我们的类分析.这次须要 ...
- vc6.0 点编译时提示Cannot complile the file 'D:\souce-code\vc-workspace\对话框\MainFrm.h'; no compile tool is
问题描写叙述: vc6.0程序,点击编译时提示对话框,内容为: Cannot complile the file 'D:\souce-code\vc-workspace\对话框\MainFrm.h'; ...
- squeeze() 函数——MATLAB
B=squeeze(A) 移除张量A的单一维,即返回和矩阵A元素相同,但所有单一维都移除的矩阵B,单一维是满足size(A,dim)=1的维. squeeze命令对二维数组是不起作用的; 如果A是一行 ...
- ArcGIS Spatial Query
Creates a spatial query which performs a spatial search for features in the supplied feature class a ...
- Python——管理属性(2)
__getattr__和__getattribute__ 眼下已经介绍了特性property和描写叙述符来管理特定属性[參考这里],而__getattr__和__getattribute__操作符重载 ...