设计模式之单例模式的几种写法——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 ...
随机推荐
- [演示示例程序]Objective-C受委托的设计模式(牛仔女孩)
今天整理电脑打开一次自我Objective-C当编写一个实践设计模式委托一个小程序,在po快来分享.也复习一下OC中的托付. Objective-C中的托付设计模式是和协议分不开的. 协议呢.就是使用 ...
- C-order/Fortran-order(Row-/Column-major order)
1. row-major / column-major order 无论是行序优先还是列序优先,其实在计算机计算中,指的都是在线性空间(linear storage,如 RAM,也即连续内存存储 co ...
- WebView 联系(要么button)至 Activity 跳跃在几个方面
第一 ,写一个 JavaScriptinterface 分类.内实现WebView至Activity 页面跳转 public class JavaScriptinterface { Activity ...
- matlab gabor 滤波器
0. gabor 基本原理 1. matlab 内置对 gabor 的支持 gabor:Create Gabor filter or Gabor filter bank g = gabor(wavel ...
- WPF 中的三维文字[转贴]
原文:WPF 中的三维文字[转贴] 原文: http://msdn.microsoft.com/msdnmag/issues/07/10/Foundations/default.aspx?loc=zh ...
- echarts学习(上)
echarts 学习之路 学习思路 初识echarts 编写自己的echarts图表 根据需求编写工作中的echarts图表[进阶篇] github地址:https://github.com/liso ...
- python3获取天气预报
#!/usr/local/bin/python3 #coding=utf-8 ''' Created on 2011-2-25 @author: http://www.cnblogs.com/txw1 ...
- WPF 路由事件 Event Routing
原文:WPF 路由事件 Event Routing 1.路由事件介绍 之前介绍了WPF的新的依赖属性系统,本篇将介绍更高级的路由事件,替换了之前的.net普通事件.相比.net的事件,路由事件具有更强 ...
- Oracle召回
后几集录制视频,记录在记录开始的时候不知道怎么,录了几集没有什么,够又一次录,过程中也也把Oracle数据库这部分看了一遍,收获也挺多的,学习是反复积累的过程,对于一些零散的知识点又回想了一下,又一次 ...
- WPF 视图导航
<Window x:Class="ViewExam.MainWindow" xmlns="http://schemas.microsoft.com/w ...