前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之—1.单例模式

设计模式之—1.单例模式

作者头像
代码改变世界-coding
发布2018-09-27 15:44:57
2950
发布2018-09-27 15:44:57
举报
文章被收录于专栏:java相关java相关
1.什么是单例模式
代码语言:javascript
复制
确保某一个类在整个项目中只有一个实例,并且自行创建实例化对象,并向整个系统提供这个实例。
2.单例模式通用类图
代码语言:javascript
复制
1.单例模式通过将构造函数设置为私有,来限制外部实例话对象。
2.提供一个getInstanse接口返回内部创建的实例对象。

类图如下:

3.单例模式的几种实现方法
方法一:饿汉模式

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

代码语言:javascript
复制
public class SingletonPattern {

    private static final SingletonPattern singletonPattern = new SingletonPattern();

    private SingletonPattern(){

    }

    public static SingletonPattern getInstance(){
        return singletonPattern;
    }
}

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

方法二:懒汉模式

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

代码语言:javascript
复制
public class SingletonPattern2 {

    private static SingletonPattern2 singletonPattern = null;

    private SingletonPattern2(){

    }

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

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

代码语言:javascript
复制
public class SingletonPattern2 {

    private static SingletonPattern2 singletonPattern = null;

    private SingletonPattern2() {

    }

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是单例模式
  • 2.单例模式通用类图
  • 3.单例模式的几种实现方法
    • 方法一:饿汉模式
      • 方法二:懒汉模式
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档