设计模式之单例模式的几种写法——java
对于设计模式的使用场景和好处,之前有介绍一篇,今天主要是单例模式的编写方式,直接看代码吧
单例模式之饿汉模式,不会懒加载。线程安全
/**
* @Author wangtao
* @Description 单例模式之饿汉模式,不会懒加载。线程安全
* @Date 2019-5-22 12:32
* @优点 线程安全,简单易实现
* @缺点 在进行类加载的时候就创建好实例,会占用内存
**/
class SingletonHungry{
//私有构造函数
private SingletonHungry(){}
//创建实例
private static final SingletonHungry singletonHungry=new SingletonHungry();
//提供获取公有方法
public static SingletonHungry getInstance(){
return singletonHungry;
}
}
单例模式之懒汉模式,会懒加载。线程不安全
/**
* @Author wangtao
* @Description 单例模式之懒汉模式,会懒加载。线程不安全
* @Date 2019-5-22 12:32
* @优点
* @缺点
**/
class SingletonLazy {
//私有构造函数
private SingletonLazy() {}
//创建实例
private static SingletonLazy singletonLazy;
//提供获取公有方法
public static SingletonLazy getInstance() {
if(singletonLazy==null){
singletonLazy=new SingletonLazy();
}
return singletonLazy;
}
}
单例模式之懒汉模式,会懒加载。线程安全,同步方法
/**
* @Author wangtao
* @Description 单例模式之懒汉模式,会懒加载。线程安全,同步方法
* @Date 2019-5-22 12:32
* @优点
* @缺点
**/
class SingletonLazyThread {
//私有构造函数
private SingletonLazyThread() {}
//创建实例
private static SingletonLazyThread singletonLazyThread;
//提供获取公有方法
public static synchronized SingletonLazyThread getInstance() {
if(singletonLazyThread==null){
singletonLazyThread=new SingletonLazyThread();
}
return singletonLazyThread;
}
}
单例模式之懒汉模式,会懒加载。线程安全,同步代码块(文本称为:双重锁)
/**
* @Author wangtao
* @Description 单例模式之懒汉模式,会懒加载。线程安全,同步代码块(文本称为:双重锁)
* @Date 2019-5-22 12:32
* @优点
* @缺点
**/
class SingletonLazyThread2 {
//私有构造函数
private SingletonLazyThread2() {}
//创建实例
private static SingletonLazyThread2 singletonLazyThread2;
//提供获取公有方法
public static SingletonLazyThread2 getInstance() {
synchronized(SingletonLazyThread2.class){
if(singletonLazyThread2==null){
singletonLazyThread2=new SingletonLazyThread2();
}
}
return singletonLazyThread2;
}
}
单例模式之饿汉模式优化,会懒加载。线程安全,使用静态内部类
/**
* @Author wangtao
* @Description 单例模式之饿汉模式优化,会懒加载。线程安全,使用静态内部类
* @Date 2019-5-22 12:32
* @优点 懒加载,在进行加载内部类的时候才会初始化对象,线程安全,是饿汉模式的优化,避免了直接的实例化占用内存空间的问题
* @缺点 只使用于静态的方法
**/
class SingletonInnerClass{
//私有构造函数
private SingletonInnerClass() {}
//创建实例
private static class SingletonInner{
private static final SingletonInnerClass singletonInnerClass =new SingletonInnerClass();
}
//提供获取公有方法
public static SingletonInnerClass getInstance() {
return SingletonInner.singletonInnerClass;
}
}
单例模式之枚举,不会懒加载。线程安全,自动序列化
/**
* @Author wangtao
* @Description 单例模式之枚举,不会懒加载。线程安全,自动序列化
* @Date 2019-5-22 12:32
* @优点
* @缺点
**/
enum SingletonEnum{
INSTANCE;
public void say(){
System.out.println("枚举类的方法");
}
}
设计模式之单例模式的几种写法——java的更多相关文章
- Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- 【设计模式】C++单例模式的几种写法——Java自动加载内部类对象,C++怎么破?
单例模式是最简单的设计模式,就让我像玩简单的游戏一样写下去吧. v1: 简单模式 和这个版本有过一面之缘,但不敢苟同. class Singleton { private: Singleton() { ...
- Android设计模式之单例模式的七种写法
一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式 ...
- Java 单例模式的七种写法
Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- 单例模式的N种写法
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧.但是其中的坑却不少,所以也常作为面试题来考.本文主要对几种单例写法的整理,并分析其优缺点.很多都是一些老生常谈的问题,但如果你不知道如何 ...
- java单例模式的几种写法比较
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- Java:单例模式的七种写法(转载)
第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...
随机推荐
- PAT 1065 - 1068 题解
这次的题目来源是 2013 年 10 月 7 日下午的浙大计算机研究生招生机试题. 这次题目的难度,按姥姥的说法是:『比普通的 PAT 要难了 0.5 个点.我是把自己的题目从 1.0 到 5.0 以 ...
- ListView 泛利
0ListView基本属性 1介绍 Listview节约内存的几种写法 2技巧一:解决ListView的ItemView中带有Button时,OnItemClick无效的问题 3技巧二Listvie ...
- VAssist 使用技巧(函数声明定位,比VS的还要强大)
1. 有了VAX可以关掉C++导航栏,快捷键ALT+M,显示当前打开文档的所有符号,而且可以输入进行过滤 2. 查找文件,shift+alt+o (直接定位) 3. 查找符号shift+alt+s 4 ...
- 百度地图 JavaScript API 极速版 开发体会
前段时间百度地图API推出了 JavaScript API 极速版 1.0 简单看了一下,从产品定位来说真是挺好. 把开发人员细分成普通web开发人员和移动web开发人员.正好用到了手机地图这块决定尝 ...
- javascript自定义事件讲解
自定义事件 什么是自定义事件? 自定义事件:这要是跟函数有关系,就是让函数能够具备事件的某些特性 为什么要使用自定义事件? 有利于多人协作开发代码,一同开发不冲突 如何去挂载自定义事件与事件函数? 1 ...
- Feature extraction - sklearn文本特征提取
http://blog.csdn.net/pipisorry/article/details/41957763 文本特征提取 词袋(Bag of Words)表征 文本分析是机器学习算法的主要应用领域 ...
- Cocos2d-x 3.0final 终结者系列教程09-漆节点Node中间Schedule
怎么做HelloWorld工程HelloWorld文字实现它自己主动运动? 有的童鞋会想到使用线程.不断的变化Label的Position, 不要那样做,因为Cocos2d-x在主线程只能被改变Nod ...
- swagger ui 值类型形参加文字注释
例: @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "indexCondition ...
- android 如何使用jar替换java代码编译
1. 第一次全编译project(随机eng/user),然后保存,以取代java代码jar包,在alps/out/target/common/obj/JAVA_LIBRARIES/xxx__inte ...
- Angular常用指令
安装Node 先去Node官网下载并安装Node.js Install the Angular CLI(安装Angular CLI) npm install -g @angular/cli Creat ...