设计模式之单例模式的几种写法——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 ...
随机推荐
- IComparable与排序
IComparable:一种特定于类型的通用比较方法,值类型或类通过实现此方法对特认定进行排序. IComparable的作用是提供了一种比较两个对象的特定类型的方法.这是必需的如果您想要为对象提供任 ...
- QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)
QT中定时器的使用方法(1)重载timerEvent(QTimerEvent *)函数,然后再在类的构造函数中设置时间间隔 startTimer(50);//单位为毫秒(2)在类的构造函数中设定如 ...
- (让你提前知道软件开发33):数据操纵语言(DML)
文章2部分 数据库SQL语言 数据操纵语言(DML) 数据操纵语言(Data Manipulation Language,DML)包含insert.delete和update语句,用于增.删.改数据. ...
- WPF中如何选择合适的元数据标记?(英文)
原文:WPF中如何选择合适的元数据标记?(英文) FrameworkPropertyMetadataOptions Enumeration:Specifies the types of framewo ...
- iOS 5.1.1 设备不能安装AdHoc问题版本号
之前苹果更新了审计规范,要求必须支持64通过苹果的审核权限位架构的应用. 但运营商表示反馈.使用iOS5.1.1该系统无法安装我们的包Adhoc版本号. 认为非常莫名.由于我们在Dep ...
- WPF多点触摸放大缩小旋转
原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z5976749/article/details/40118437 如果 ...
- hdu4614 二分法+段树
意甲冠军:给你1-n花瓶 .起初,所有的空,今天,有两种操作模式, 1:从花瓶a開始插入b朵花 假设不能插进去 输出字符串 否则输出最多插入的起点和终点: 2:把a-b的花瓶 ...
- Effective C++:规定24:如果所有的单位都需要的参数类型转换,使用请做到这一点non-member功能
(一个) 如果一个class.同意整数"隐式转换为"有理数似乎非常合理. class Rational{ public: Rational(int numerator = 0, i ...
- WPF中画虚线
原文:WPF中画虚线 在WPF中,画线的方法十分简单,只要声明一个Line然后添加到指定的位置就可以了,但Line并不仅仅只能画一条直线,还可以对直线进行修饰. 1.Line.StrokeDashAr ...
- linux_无秘登录问题(不生效)
1 . 登录1,执行命令 ssh-keygen -t rsa 之后一路回 车,查看刚生成的无密码钥对: cd .ssh 后 执行 ll 2 .把 id_rsa.pub 追加到授权的 key 里面去. ...