博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之—单例模式
阅读量:6542 次
发布时间:2019-06-24

本文共 1399 字,大约阅读时间需要 4 分钟。

1.什么是单例模式

确保某一个类在整个项目中只有一个实例,并且自行创建实例化对象,并向整个系统提供这个实例。

2.单例模式通用类图

1.单例模式通过将构造函数设置为私有,来限制外部实例话对象。2.提供一个getInstanse接口返回内部创建的实例对象。

类图如下:

929184-20180825224938774-1973953746.jpg

3.单例模式的几种实现方法

方法一:饿汉模式

单例模式实现方式有多种,其中比较简单的实现方式是直接定义一个private的属性,并直接初始化。相关实现如下:

public class SingletonPattern {    private static final SingletonPattern singletonPattern = new SingletonPattern();    private SingletonPattern(){    }    public static SingletonPattern getInstance(){        return singletonPattern;    }}

这种方法被称为饿汉模式,即不管有没有地方需要获取实例对象,都在类加载的时候直接实例话对象出来。此中方式类加载比较慢,但是获取实例对象比较快。

方法二:懒汉模式

另外一种实现方式被称为懒汉模式,即在第一次调用getInstance方法的时候才会创建实例话对象。实现方式如下:

public class SingletonPattern2 {    private static SingletonPattern2 singletonPattern = null;    private SingletonPattern2(){    }    public static SingletonPattern2 getInstance(){        if (singletonPattern == null) {            singletonPattern = new SingletonPattern2();        }                return singletonPattern;    }}

此种实现方式会有线程安全问题,即在getInstance中做了先检查再操作,下面是对此问题的一种解决方案:

public class SingletonPattern2 {    private static SingletonPattern2 singletonPattern = null;    private SingletonPattern2() {    }    public static synchronized SingletonPattern2 getInstance() {        if (singletonPattern == null) {            singletonPattern = new SingletonPattern2();        }                return singletonPattern;    }}

此种解决方式是在getInstance方法加了同步操作。

转载于:https://www.cnblogs.com/vitasyuan/p/9535727.html

你可能感兴趣的文章
PHP生成HTML静态页面
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
用户ID的代码生成
查看>>
win7经常出现“关闭xxxx前您必须关闭所有会话框”
查看>>
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
查看>>
MongoDB 自己定义函数
查看>>
Summary Day30
查看>>
逆向输出回环数组
查看>>
高清摄像头MIPI CSI2接口浅解【转】
查看>>
C# CancellationTokenSource和CancellationToken的实现
查看>>