博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解...
阅读量:4974 次
发布时间:2019-06-12

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

 

 

 

  不多说,直接上干货!

 

 

 

什么是单例设计模式?

  解决的问题:可以保证一个类在内存中的对象唯一性,必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

 

 

如何保证?

  1、不允许其他程序用new创建该类的对象

  2、在该类中创建一个本类的实例

  3、对外提供一个方法让其他程序可以获取该对象

 

 

步骤(非常重要)

  1、构造方法私有化

  2、通过new在本类中创建本类的对象

  3、定义一个共有的方法,将创建的对象放回

 

 

 

单例的两种模式

  1、饿汉式单例(开发时常用)

  2、懒汉式单例(面试时常用)

 

 

//饿汉式单例(开发时常用)  class Single  {      private int num;      public void setNum(int num){          this.num= num;      }          public int getNum(){          return num;      }  //开始构建饿汉式单例        private static Single s= new Single();//2、在该类中创建一个本类私有静态的实例        private Single(){}  //1、构造方法私有化        public static Single getInstance() //3、定义一个共有的方法,将创建的对象放回      {            return s;      }  } //懒汉式单例(面试时常用)//在多线程并发访问的时候有可能保证不了对象的唯一性class Single2    {        private static Single2 s = null;   //2、在该类中创建一个本类私有静态的实例       private Single2(){}   //1、构造方法私有化        public static Single2 getInstance()  {   //3、定义一个共有的方法,将创建的对象放回            if(s==null)                s=new Single2();            return s;        }      }  //测试类  class SingleDemo  {    public static void main(String args [])  {        Single s1 = Single.getInstance();        Single s2 = Single.getInstance();        System.out.println(s1==s2);  //打印出true        s1.setNum(5);        s2.setNum(10);        System.out.println(s1.getNum());  //打印出是10,说明s1和s2是同一个对象        }  }

 

 

 

 

 

 

 

 

 

 

二、如何保证?

1、不允许其他程序用new创建该类的对象
2、在该类中创建一个本类的实例
3、对外提供一个方法让其他程序可以获取该对象

三、步骤:

1、构造方法私有化
2、通过new在本类中创建本类的对象

3、定义一个共有的方法,将创建的对象放回

四、单例的两种模式

1、饿汉式单例(开发时常用)

2、懒汉式单例(面试时常用)

 

转载于:https://www.cnblogs.com/zlslch/p/7563338.html

你可能感兴趣的文章
分布式系统事务一致性解决方案
查看>>
树梅派中文输入法支持
查看>>
[Git] 005 初识 Git 与 GitHub 之分支
查看>>
使用Analyze 和Instruments-Leaks分析解决iOS内存泄露
查看>>
Vue.js的入门
查看>>
【自定义异常】
查看>>
pip install 后 importError no module named "*"
查看>>
一些疑惑
查看>>
Codeforces Round #413 A. Carrot Cakes
查看>>
Linux(Ubuntu16.04)下添加新用户
查看>>
Windows c++应用程序通用日志组件(组件及测试程序下载)
查看>>
openstack dpdk
查看>>
springmvc跳转方式
查看>>
Linux安装Redis
查看>>
IOS 第三方管理库管理 CocoaPods
查看>>
背景色渐变(兼容各浏览器)
查看>>
Redis中7种集合类型应用场景
查看>>
MariaDB 和 MySQL 比较
查看>>
MYSQL: 1292 - Truncated incorrect DOUBLE value: '184B3C0A-C411-47F7-BE45-CE7C0818F420'
查看>>
Java JPA @Transient 在Hibernate中应用
查看>>