首页 > 其他分享 >单例模式(static应用场景)

单例模式(static应用场景)

时间:2023-06-11 20:44:08浏览次数:41  
标签:SingleTon 场景 对象 --- static 单例 public 加载

 

单例模式(Singleton)
设计-->一个类只能创建一个对象 有效减少内存占用空间
设计一个系统--->百度 搜索引擎
public class Baidu{
public void 搜索(String keyword){
}
}
创建一个Baidu对象 new
调用搜索的方法 做事情 方法执行一遍
同一时间有很多很多很多很多人在使用这个系统
对象--->只创建一个 堆内存中就只开辟一个空间
调用一次方法--->临时执行一次 方法执行空间就回收啦

单例模式的实现
1.私有的构造方法
2.私有的静态的当前类对象作为属性
3.公有的静态的方法返回当前类对象

指的是对象的加载
饿汉式(立即加载) 对象启动时就加载啦
不会产生对象没有就拿来使用的问题 空指针异常
启动项目加载的对象过多 有些还没有使用 产生服务器承载压力的问题


懒汉式(延迟加载) 对象什么时候用到了 才会加载
可能会由于没有操作好 导致异常(很严谨)
启动项目时候只有需要的加载 不需要的还没有创建 不会浪费空间
*生命周期托管(单例对象别人帮我们处理) 对象加载过程交给别人

 

package singleton;

public class SingleTon {
    //通过我的设计 让这个类只能创建一个对象

    //每一个类都有默认无参数的构造方法----公有  在外面可以随意创建
    //1.让构造方法变成私有---保证外面不可以随便创建对象
    private SingleTon(){}
    //2.单例 不是无例 --- 在本类中的某个成员位置上创建唯一的一个对象
    //在以下的四个位置 写一行new SingleTon
    //属性
    //方法------不行  每一次执行都会产生一个过程  保证不了唯一
    //构造方法--不行  私有  本身就是这个构建过程
    //块--------不行  没有返回值  创建了对象也无法给别人使用
    //2.在当前类中存在一个私有的静态属性  是当前类类型的
    private static SingleTon single;//直接 = new Singleton(); 立即加载  饿汉式
    //3.提供一个获取单个对象的方法给用户
    //   返回值  将对象返回出去
    public static SingleTon getSingleTon(){// get类名  newInstance
        if(single == null) {
            single = new SingleTon();//延迟加载的方式  懒汉式
        }
        return single;//引用类型
    }

}

  

package singleton;

public class TestMain {
    public static void main(String[] args){
        SingleTon s1 = SingleTon.getSingleTon();
        SingleTon s2 = SingleTon.getSingleTon();
        System.out.println(s1==s2);//true 比较地址
        System.out.println(s1.equals(s2));//true Object类继承过来的 默认也比地址
        System.out.println(s1);//类全名@hashCode--->16进制的整数
        System.out.println(s2);
    }
}

  

标签:SingleTon,场景,对象,---,static,单例,public,加载
From: https://www.cnblogs.com/yonlanmoji/p/17473556.html

相关文章

  • Segment Routing 典型应用场景
       ......
  • C++ 单例模式的各种坑及最佳实践
    单例模式是设计模式中最简单、常见的一种。其主要目的是确保整个进程中,只有一个类的实例,并且提供一个统一的访问接口。常用于Logger类、通信接口类等。基本原理限制用户直接访问类的构造函数,提供一个统一的public接口获取单例对象。这会有一个“先有鸡还是先有蛋”的问题:......
  • 使用双重检查锁定技术保证多线程中单例模式的线程安全
    使用双重检查锁定技术保证多线程中单例模式的线程安全前言单例模式是一种设计模式,保证一个类只有一个实例,并且在整个应用中共享。它适用于需要控制对共享资源的访问,例如数据库连接、配置文件或日志记录器。但是,在多线程环境下实现单例模式可能比较棘手。如果多个线程同时尝试创......
  • Django的staticfiles库
    staticfiles库是Django提供的一个用于管理静态文件的库,它提供了一些工具和函数来帮助开发者在Django应用程序中管理和提供静态文件服务。在Django应用程序中,静态文件通常包括CSS样式文件、JavaScript脚本文件、图像文件以及其他一些资源文件。这些静态文件通常需要被服......
  • java设计模式之(单例模式)
    单例模式(懒汉式和饿汉式)    在Java中指的是单例设计模式他是软件开发中最常用的设计模式之一。单:唯一例:实例单例设计模式:既某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式要点:  1.某个类只能有一个实例       构造器私有  2.它必须......
  • UE4 自定义StaticMesh碰撞失效
    将画刷编辑的Actor转换成静态网格体后,原有的碰撞消失了,解决办法如下:首先在内容浏览器中找到需要更改碰撞配置的网格体双击进入静态网格编辑器页面,右侧找到细节面板找到碰撞-->碰撞复杂度-->选择将复杂碰撞用作简单碰撞保存即可......
  • c++中static的用法
    1、静态全局变量全局变量的空间会在程序的生命周期内分配,在全局变量的前面加上static,变成静态全局变量。#include<iostream>#include<string.h>usingnamespacestd;staticintn=5;intmain(){n=10;printf("%d\n",n);return0;}静态全局变量......
  • golang实现设计模式之装饰器模式-优缺点,适用场景
    装饰器模式是一种结构型设计模式,简单概括就是:不改变先有对象结构下,动态给对象增加一些职责。装饰器模式通过组合方式实现,与继承的异同:使用继承方式,具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。使用组合方式,创建装饰对象来装饰真实对象,原对象功能不变,另外扩展。......
  • golang实现设计模式之组合模式-优缺点与适用场景
    组合模式是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。结构抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件......
  • golang实现设计模式之代理模式-优缺点,适用场景
    代理模式作为一种结构型的设计模式,因为某种原因,需要对访问的对象通过代理访问目标对象,访问对象不适合或者不能直接引用该目标对象,代理就成为访问对象和目标对象的中介。结构1.抽象主题(Subject)类。通过接口或抽象类声明真实主题和代理对象实现的业务方法。2.真实主题(RealSubje......