千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:大连千锋IT培训  >  技术干货  >  单例模式是什么?

单例模式是什么?

来源:千锋教育
发布人:bjq
时间: 2023-04-06 16:52:48

  一. 什么是单例模式

  单例模式是什么?单例模式是23种设计模式中创建型模式的一种,通过单例模式创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式:饿汉式、懒汉式。

千锋教育

  二. 单例模式的实现

  接下来咱们就来讲一下单例模式的两种基本实现方式:饿汉式、懒汉式。

  1. 饿汉式

  代码如下所示:

  import com.qianfeng.ran

  /*

  * @author:

  *

  * 由饿汉式创建的类:老婆类

  */

  public class Wife{

  //创建一个自身实例对象的私有化静态属性

  private static Wife wife = new Wife();

  //创建私有化无参构造方法

  private Wife(){

  }

  //创建一个供外界获取当前实例对象的公开静态方法

  public static Wife getInstance(){

  return wife;

  }

  }

  class Demo{

  public static void main(String[] args) {

  Wife wife1 = Wife.getInstance();

  Wife wife2 = Wife.getInstance();

  //打印结果会是 true

  System.out.println(wife1 == wife2);

  }

  }

  从上面案例可以看出,构造方法被私有化后,我们只能通过它提供的方法 getInstance() 来获取当前类的实例对象。而我们每次获取的对象都会是同一个,所以 Wife 是个单例模式的类。

  而从 Wife 类中我们能看得到它有个静态的私有属性,这个私有属性就是当前类的实例对象。也就是说不管我们还没有调用这个类,类中的静态对象属性在加载进内存中的时候已经存在了,这个就是饿汉式的特点。

  饿汉式就婚姻里的对象一样,他(她)一早就出现在这个世上,只是需要你们彼此寻找到对方而已。

  2. 懒汉式

  接下来再以孩子为例,来创建一个懒汉式类,代码如下所示:

  import com.qianfeng.ran

  /*

  * @author:

  *

  * 由懒汉式创建的类:孩子类

  */

  public class Child{

  //创建一个类型为当前类的私有化静态属性

  private static Child child;

  //创建私有化无参构造方法

  private Child(){

  }

  //创建一个供外界获取当前实例对象的公开静态方法

  public static Child getInstance(){

  //判断静态属性是否为 null

  if(child == null){

  //如果为 null 则创建当前类对象并赋值给静态属性

  child = new Child();

  }

  return child;

  }

  }

  class Demo{

  public static void main(String[] args) {

  Child child1 = Child.getInstance();

  Child child2 = Child.getInstance();

  //打印结果会是 true

  System.out.println(child1 == child2);

  }

  }

  这个案例也是一样构造方法被私有化,只能通过其提供的静态方法获取其实例对象。

  在 Child 类中它也有个静态的私有属性,但是这个静态属性并没有赋值,只有在第一次调用 Child 类获取实例方法 getInstance() 的时候,才会创建当前类的实例对象并赋值给其属性并返回。因此在没有调用其方法之前,对象是没有创建的,只有等到需要的时候才会被创建,这就是懒汉式。

  懒汉式就孩子一样,他们并不会一开始就存在,只有当你创造他的时候才会存在。而你与你的对象创建出来每一个孩子都会是独一无二的,即使你生好几个,每一个也都是唯一的。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么是对Event loop的了解?

2023-04-07

什么是Java循环?

2023-03-30

switch语句的case和default有顺序吗?

2023-03-30

最新文章NEW

移动端兼容适配是什么?

2023-04-11

说一说load和ready区别?

2023-04-07

10分钟学会阿里OSS对象存储

2023-03-07

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>