java的设计模式-----------单例类

什么是设计模式?一个问题有n种解法,其中肯定有一种是最优的,这个最优的解法被人总结出来了,称之为设计模式。

设计模式要明白特点是什么?解决什么问题?怎么写?

饿汉式单例类

单例设计模式确保一个类只能创建一个对象。如何确保只能创建一个对象呢?如果在单例类的类外直接创建对象,可以创建无数个对象。

复制代码
 //1、如何确保只能创建一个对象
        //A a1 = new A();
        //A a2 = new A();
        //A a3 = new A();

所以不能在类外创建对象,要使得类外不能创建对象,我们要把单例类的构造器私有。私有构造器后类外不能创建对象,我们要在单例类内部创建对象,且有且只能创建1个对象,结合静态变量只有1份的特点,我们要用到static修饰。

复制代码
public static A a = new A();

因为a是公开的,类外可以用A.a调用,也可以给它赋值,也就是说会将对象的值破坏。

复制代码
A.a = null;
        System.out.println(A.a);

所以,我们最好要对变量私有化,并提供对外的静态接口方法。

复制代码
 //3、提供对我的接口方法
    public static A getInstance(){
        return a;
    }

为了在单例类的内部不修改(破坏)对象,我们用final修饰。

复制代码
 private static final A a = new A();//a在本类中只有1份

在外部不能直接调用a,而是调用A.getInstance。

复制代码
A a1 = A.getInstance();
        System.out.println(A.getInstance());

刚刚的单例类属于++饿汉式单例++,拿对象时,对象已经创建好了。

懒汉式单例类

特点:用对象时才开始创建对象。

1、构造器私有

2、定义静态变量用于存储对象,但是不能在此处创建对象。

3、提供一个静态方法,保证返回的是同一个对象。(需要对象才开始创建对象)

复制代码
package com.ljh.singleinstance2;

public class A {
    //1、私有化构造器
    private A(){
    }
    //2、私有化静态变量
    private static A a;
    //3、提供静态方法返回对象
    public static A getInstance(){
        if(a==null){//保证只能创建1个对象
        a = new A();//当第二次拿对象时,a != null,不会创建对象
        }
        return a;
    }
}

package com.ljh.singleinstance2;

public class Test {
    public static void main(String[] args) {
        //目标:认识懒汉式单例类
        A a = A.getInstance();//第一次拿对象
        A a2 = A.getInstance();//第二次拿对象
        System.out.println(a);
        System.out.println(a2);
    }
}

刚刚的单例类属于懒++汉式单例++,需要对象时,才开始创建对象。

相关推荐
蒸蒸yyyyzwd4 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
睡美人的小仙女1275 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
程序员徐师兄5 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
rayufo5 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk5 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向6 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
五岳6 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫6 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9966 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手6 小时前
Python while 循环 极简核心讲解
java·python·算法