从访问修饰符的角度看单例模式

9 篇文章 0 订阅
2 篇文章 0 订阅

自己终于还是进入到设计模式这个领域了,比自己想象的快了一些。以前也学过、了解过一些模式,但看了之后又,本科毕业找工作面试的时候会看一下单例(这个最常考),但背过之后又会忘记,完全写不处代码来。后来自己反思了一下,是自己的Java基础不到位,就和高中学数学一样,对于同一个题目,一般学生能找出1一条有用信息,对于优生来说,往往能得到好几个有用的信息,Java也是同样的道理,学习就是要多看(书、优秀的代码)、多练(写代码)、多反思多总结(记笔记,写博客等方式)。

不多废话,进入正题:记得我参加的第一个面试时,面试官说单例模式有7中写法,我当时只知道饿汉式和懒汉时,由于复习的缘故,当时应该是写出来了。不过后来早忘记了。今天我们从修饰符入手,撸一撸单例模式。

如果不熟悉访问修饰的,请看我的这篇文章:https://blog.csdn.net/qq_39767955/article/details/84308856

如果不了解static关键字的,请看https://blog.csdn.net/qq_39767955/article/details/84037383

什么是单例模式?可以这样说,只产生一个对象的方法,叫做单例模式,它的核心是只产生一个实例对象。我们来看第一个例子:

class Soup1{
    private Soup1 (){}
    public static Soup1 makeSoup(){

        return new Soup1();
    }


}

有了访问修饰符和static关键字的知识后,这段代码就不难理解了:Soup1类有一个private修饰的默认构造方法(注释1),private意味着只能在这个类里面使用这个构造方法产生一个Soup1对象,所以在其他类中就不能使用Soup1 Soup1Instance = new Soup1()模式来创建对象了;但是Soup1又提供了一个public的、静态的、返回值类型为Soup1的空参方法makeSoup(),由于被static修饰的方法可以在不创建类对象时被调用,这里可以用类去调用Soup1.makeSoup(),这样就返回了一个Soup1实例对象的应用了。

有了以上的知识,我们来看看Soup2类

class Soup2{

    private Soup2(){}

    private static Soup2 sp = new Soup2();
    public static Soup2 getInstance(){
        return sp;
    
    }
    public void f(){}
}

Soup2类的对象是作为Soup2的一个static private(静态私有)成员而创建的,所以有且只有一个对象,为什么只有一个对象,因为被static修饰了,创建的实例只有一个。

 

注释1处说明:谁说默认的构造方法就必须是public?只要是空参的构造方法就叫做默认构造方法,如果类没有构造方法,编译器会帮你建一个默认构造器(不带任何参数),如果已经编写了默认构造器,那么就不会再创建它了。(《Java编程思想》第四版,原文122页原话)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值