设计原则&模式:单例模式(创建型)
定义:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
五种实现方式:
- 饿汉式
- 懒汉式
- 双重校验
- 静态内部类
- 枚举类
饿汉式
特点:线程安全,调用效率高,但是不能延时加载
public class SingletonDemo01{
private static SingletonDemo1 instance = new SingletonDemo1();
private SingletonDemo1(){}
public static SingletonDemo1 getInstance(){
return instance;
}
}
懒汉式
特点:线程安全,调用效率不高,但是能延时加载
public class SingletonDemo2{
//类初始化时,不初始化这个对象(延时加载,真正用的时候再加载)
private static SingletonDemo2 instance;
//构造器私有化
private SingletonDemo2(){}
//方法同步,调用效率低
public static synchronized SingletonDemo2 getInstance(){
if(instance == null){
instance = new SingletonDemo2();
}
return instance;
}
}
双重校验
public class SingletonDemo3{
private volatile static SingletonDemo3 singletonDemo3;
private SingletonDemo3(){
}
public static SingletonDemo3 newInstance(){
if(singletonDemo3 == null){
synchronized (SingletonDemo3.class){
if(singletonDemo3 == null){
singletonDemo3 = new SingletonDemo3();
}
}
}
return singletonDemo3;
}
}
静态内部类
特点:线程安全,调用效率高,可以延时加载
public class SingletonDemo4{
/* 静态内部类 */
private static class SingletonClassInstance{
private static final SingletonDemo4 instance = new SingletonDemo4();
}
private SingletonDemo4(){}
public static SingletonDemo4 getInstance(){return SingletonClassInstance.instance;}
}
枚举类
public enum SingletonDemo5{
// 枚举元素本身就是单例
INSTANCE;
// 添加自己需要的操作,直接通过SingletonDemo5.INSTANCE.doSomething()的方式调用即可。
public void doSomething(){System.out.println("doSomething");}
}
class Test{
public static void main(String[] args){SingletonDemo5.INSTANCE.doSomething();}
}
END
设计原则&模式:单例模式(创建型)的更多相关文章
- 原型模式 prototype 创建型 设计模式(七)
原型模式 prototype 意图 用原型实例指定需要创建的对象的类型,然后使用复制这个原型对象的方法创建出更多同类型的对象 显然,原型模式就是给出一个对象,然后克隆一个或者更多个对象 小时候看 ...
- 设计模式03: Builder 生成器模式(创建型模式)
Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将 ...
- 设计模式05: Prototype 原型模式(创建型模式)
Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...
- 设计模式04: Factory Methord 工厂方法模式(创建型模式)
Factory Methord 工厂方法模式(创建型模式) 从耦合关系谈起耦合关系直接决定着软件面对变化时的行为 -模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之变更 -模块与模块之间的 ...
- 单例模式——创建型模式01
1. 名称 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类.单例模式是一种对象创建型模式. 2. 问题 ...
- Sington单例模式(创建型模式)
一.使用Sington单例模式的动机(Motivation) 在软件系统中,经常有一些特殊的类,必须保证它们只有一个实例,才能保证它的逻辑正确性.以及良好的效率. 大多数类用的是常规的构造器,所以往往 ...
- Java设计模式——建造者模式(创建型模式)
概述 建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 建造者模式意在为重叠构造 ...
- [C#]设计模式-单例模式-创建型模式
单例模式用于在整个软件系统当中保持唯一实例,在 C# 当中最能够体现此概念的就是静态类,静态类的生命周期是跟随整个程序,并且在整个程序中仅保有一个实例. 不过在这里我们不再详细阐述单例模式与静态类有什 ...
- 第一式、单例模式-Singleton模式(创建型)
一.简介 单例模式主要用的作用是用于保证程序运行中某个类只有一个实例,并提供一个全局入口点.单例模式(Singleton)为GOF阐述的标准24种设计模式中最简单的一个.但随着时间推移,GOF所阐述的 ...
- Java设计模式02:常用设计模式之工厂模式(创建型模式)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...
随机推荐
- MySQL 迁移到 PG 怎么做
千万不要用 pgloader,就是个垃圾 etlalchemy 是值得信赖的选择. https://github.com/seanharr11/etlalchemy 还有其它基于 sqlalchemy ...
- 【Java高级编程】Java多线程学习笔记
Java 多线程 目录 Java 多线程 1.多线程创建 方法1:通过 继承 thread 类 方法2:通过 实现 Runnable 接口 2.线程中的相关方法 (1)设置优先级 setPrlorty ...
- 【Linux】【UOS】为挂载的磁盘创建快捷方式(软链接)
打开项目或者保存文件的时候,如果需求路径不是系统盘路径,那么找起来还真是麻烦.以下时候通过创建快捷方式(软链接)的方式,将打开磁盘的快捷方式放在用户目录下,就方便寻找打开了. 1.查询挂载点 sudo ...
- 【前端】【H5 API】拽托
拖曳操作需要借助于鼠标来实现,如文件或图片的移动操作等.在开发中,我们经常使用原生的JavaScript来实现拖曳效果,实现起来比较复杂.因此,HTML5为我们提供了更好用的接口或者事件,在很大程度上 ...
- Visual Studio - API调试与测试工具之HTTP文件
后端开发,我们对于Api接口调试测试大致有以下方法:单元测试.Swagger.Postman. 但是每种方式也都有其局限性,几年前使用Visual Studio Code开发过一段时间,接触了REST ...
- 龙哥量化:期货交易软件:文华、博易大师闪电手、快期,同花顺期货通,金字塔,MC,MT5,TB交易开拓者横向对比分析
如果您需要代写公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 此文档做对比分析, 我有空后给详细分析
- Qt音视频开发03-ffmpeg倍速播放(半倍速/2倍速/4倍速/8倍速)
一.前言 用ffmpeg做倍速播放,是好多年都一直没有实现的功能,有个做法是根据倍速参数,不断切换播放位置,实现效果不是很好,ffplay中的倍速就做得很好,而且声音无论倍速多少还非常柔和,有特别的降 ...
- 做一个windos服务和api搭配,获取电脑的mac地址
创建webapi项目,只是搭配服务用,什么三层mvc都不弄了,默认的模板直接用就好. 简单分析下,采用signalr通信来传递mac地址,所以先安装个signalr的包(如果简单操作的话可以不装最新的 ...
- Windows10 环境下使用 Cmake 和 MinGW-w64 编译安装 OpenCV 4.0.1
Windows10 环境下使用 Cmake 和 MinGW-w64 编译安装 OpenCV 4.0.1 翻译 搜索 复制
- Python 虚拟环境:原理解析与最佳实践
从一个困境说起 小王最近遇到了一个棘手的问题:他在维护两个 Python 项目,一个是去年开发的数据分析系统,依赖 TensorFlow 1.x:另一个是最近在做的预测模型,需要用到 TensorFl ...