对于设计模式的使用场景和好处,之前有介绍一篇,今天主要是单例模式的编写方式,直接看代码吧

  • 单例模式之饿汉模式,不会懒加载。线程安全

/**
* @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的更多相关文章

  1. Java设计模式之单例模式(七种写法)

    Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...

  2. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  3. 【设计模式】C++单例模式的几种写法——Java自动加载内部类对象,C++怎么破?

    单例模式是最简单的设计模式,就让我像玩简单的游戏一样写下去吧. v1: 简单模式 和这个版本有过一面之缘,但不敢苟同. class Singleton { private: Singleton() { ...

  4. Android设计模式之单例模式的七种写法

    一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式 ...

  5. Java 单例模式的七种写法

    Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...

  6. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

  7. 单例模式的N种写法

    单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧.但是其中的坑却不少,所以也常作为面试题来考.本文主要对几种单例写法的整理,并分析其优缺点.很多都是一些老生常谈的问题,但如果你不知道如何 ...

  8. java单例模式的几种写法比较

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  9. Java:单例模式的七种写法(转载)

    第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...

随机推荐

  1. HDU 1143 Tri Tiling (递推)

    Tri Tiling Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. 从Client应用场景介绍IdentityServer4(一)

    原文:从Client应用场景介绍IdentityServer4(一) 一.背景 IdentityServer4的介绍将不再叙述,百度下可以找到,且官网的快速入门例子也有翻译的版本.这里主要从Clien ...

  3. wpf mvvm模式下CommandParameter传递多参

    原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...

  4. 广义逆高斯分布(Generalized Inverse Gaussian Distribution)及修正贝塞尔函数

    1. PDF generalized inverse Gaussian distribution (GIG) 是一个三参数的连续型概率分布: f(x)=(a/b)p/22Kp(ab−−√)xp−1e− ...

  5. 分布式缓存技术PK:选择Redis还是Memcached?

    作者:田京昆(腾讯后台研发工程师) 来源:腾云阁(https://www.qcloud.com/community/article/129) Memcached和Redis,作为近些年最常用的缓存服务 ...

  6. APP和服务端-架构设计(一)

    架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...

  7. 简述WPF中的画刷(Brush)

    原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...

  8. 开源 自由 java CMS - FreeCMS1.9 积分规则管理

    项目地址:http://www.freeteam.cn/ 积分规则管理 管理会员操作时积分处理规则. 1. 积分规则管理 从左側管理菜单点击积分规则进入. 2. 加入积分规则 在积分规则列表下方点击& ...

  9. Http请求格式(在Linux下使用telnet亲测,通过这篇我才明白)

    命令行窗口中用telnet测试HTTP协议请求消息格式响应消息格式1. 命令行窗口中用telnet测试HTTP协议 HTTP消息是由普通ASCII文本组成.消息包括消息头和数据体部分.消息头以行为单位 ...

  10. php 二维数组key初始化从0开始

    这个是一个二维数组 array(2) { [1]=> array(2) { ["sourcesid"]=> int(1) ["addusernum" ...