【设计模式:单例模式】单例模式01:饿汉模式

单例模式:饿汉模式

正文开始@Assassin

1. 什么是设计模式?

  • 设计模式是静态方法属性的经典应用
  • 设计模式是在大量的实践中总结和理论化之后的优选的代码结构编程风格以及解决问题的思考方式。设计模式可以想象成经典的棋谱,面对不同的棋局,我们便用不同的棋谱,省去了我们自己再去思考和摸索的过程
    在这里插入图片描述
    简而言之,就是面对一些相同的类似的场景我们可以用一些总结出来的惯用套路去解决问题,这大大地提高了我们的效率,这种策略在编程中就称为模式,一些比较经典的实用的模式便叫做设计模式。在Java编程中有常见的23种设计模式,如观察者模式工厂模式适配器模式代理模式模板模式等,这里介绍单例模式中的饿汉模式

2. 单例设计模式:

2.1 什么是单例模式?

顾名思义,所谓单例模式就是只有单个的实例。

  • 类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个可以取得该对象实例的方法
  • 单例模式有两种方法:1. 饿汉模式 2. 懒汉模式

单例模式有什么用呢?在实际的网站开发或软件开发中,有一个类是很有重量级的核心类,它非常地耗用资源,但实际上我们只需要一个,那么这个时候单例模式就会显得很有价值。

2.2 单例模式应用实例:

下面演示饿汉模式的具体实现,步骤如下:

  • 构造方法(构造器)私有化
  • 在类的内部创建对象,这个对象需修饰成static
  • 向外提供一个静态的公共方法

具体实现如下:

package com.haut.iot.assassin;

//有一个类是GirlFriend
//假如你只能有一个女朋友
class GirlFriend {
    private String name; //姓名
    //如何保障我们只能创建一个GirlFriend对象?
    //[单例模式 -> 饿汉模式]
    //1. 构造器私有化
    //2. 在类的内部创建对象(该对象需是static)
    //3. 向外提供一个静态的公共方法
    private static GirlFriend gf = new GirlFriend("王祖贤");//私有对象

    //为了在getInstance()返回gf,需将该方法修饰为static
    public static GirlFriend getInstance() {
        return GirlFriend.gf; //返回gf
    }

    private GirlFriend(String name) { //构造器
        this.name = name;
    }

    @Override
    public String toString() { //重写toString()
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

public class SingleTon {
    public static void main(String[] args) {
        //两个对象时同一个对象(静态的对象)
        GirlFriend instance1 = GirlFriend.getInstance();
        System.out.println(instance1);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);
        //true
        System.out.println(instance1 == instance2);
    }
}

运行结果:
在这里插入图片描述
下面具体解释一哈~~
在这里插入图片描述
我们的需求是只能有一个实例化对象,这个时候的解决方法是把构造器设计成private防止在类外直接创建对象。这个时候问题又来了,仔细想一下,当把构造方法修饰为private后,我们根本得不到实例化对象了,这时候就有点矫枉过正内味了(我们本来是只要一个实例化对象,但这样连一个对象都不能实例化了)

对应的解决方法是在本类中创建一个privatestatic对象,再提供一个公共的静态方法getInstance()获取该对象。这个getInstance()方法为什么要修饰成static呢?因为我们的本意就是不想通过创建对象来实例化对象,所以修饰成static就意味着可以直接通过类名来调用。这个时候反过来看,对象的引用gf也就应该相应地被修饰为static,因为静态方法不能调用非静态的方法或属性。如下:
在这里插入图片描述
具体的涉及到静态方法或属性的类加载机制这里就不再展开。


多谈两句:为啥这个设计模式要被叫做饿汉模式呢?
在这里插入图片描述
只要类被加载,此对象gf就会被创建,即使不使用gf,它也会被创建,这是类的加载机制:只要调用了静态方法或属性,该方法或属性所在的类就会被加载,类加载之后便会首先初始化静态属性和静态代码块

举个俗点的例子,就说你还没跟gf相处很久,你俩还没来得及相互了解它便成了你的女朋友,也就是操之过急,像个饥饿的汉子一样,这便是饿汉模式的通俗理解。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁海没有七号公园

谢谢你%%%

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值