单例模式
单例模式
一、前言
设计模式:是一套被反复使用的代码设计经验的总结,专门用于解决特定场景的需求,是为了可重用代码,让代码更容易被他人理解,尽量达到设计原则,保证代码可靠性。
单例设计模式:最常用、最简单的设计模式。
用途:设计工具类。
目的:保证在整个应用中某一个类有且只有一个实例(一个类只有一个对象在堆内存中)
二、分类
分为:饿汉式、懒汉式
三、饿汉式单例
- 必须先在该类中创建出一个对象。
- 私有化自身构造器,防止外界通过构造器穿建新的工具类对象。
- 向外暴露一个公共的静态方法用于返回自身。
package singleton; //饿汉式 public class SortUtils { //事先创建好当前类的一个对象 private static SortUtils sortUtils=new SortUtils(); //私有化自身构造器,防止外界通过构造器创建自身对象 private SortUtils(){}; public static SortUtils getSortUtils(){ return sortUtils; } //将工具方法作为实例方法挂在单例上 public int[] arraysort(int[] array){ for(int i=0;i<array.length-1;i++){//控制比较轮次,一共 n-1 趟 for(int j=0;j<array.length-1-i;j++){//控制两个挨着的元素进行比较 if(array[j] > array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } return array; } }
package singleton; public class Test { public static void main(String[] args) { //单例访问 SortUtils a= SortUtils.getSortUtils(); System.out.println(a); //测试方法 SortUtils newGetSort= SortUtils.getSortUtils(); int[] array={1,10,8,7,4,6}; int[] array2=newGetSort.arraysort(array); for(int i:array2){ System.out.print(i+" "); } } }
四、懒汉式单例
- 私有化自身构造器,防止外界通过构造器穿建新的工具类对象。
- 判断是否sortUtils是否为空,为空则创建出一个对象。
- 向外暴露一个公共的静态方法用于返回自身。
package singleton2; //饿汉式 public class SortUtils { //私有化自身构造器,防止外界通过构造器创建自身对象 private SortUtils(){}; //声明当前类的一个对象 private static SortUtils sortUtils=null; //提供一个公共静态方法,返回创建好的实例 public static SortUtils getSortUtils(){ if(sortUtils==null){ sortUtils = new SortUtils(); } return sortUtils; } //将工具方法作为实例方法挂在单例上 public int[] arraysort(int[] array){ for(int i=0;i<array.length-1;i++){//控制比较轮次,一共 n-1 趟 for(int j=0;j<array.length-1-i;j++){//控制两个挨着的元素进行比较 if(array[j] > array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } return array; } }
package singleton2; public class Test { public static void main(String[] args) { //单例访问 SortUtils a=SortUtils.getSortUtils(); System.out.println(a); //测试方法 SortUtils newGetSort=SortUtils.getSortUtils(); int[] array={1,10,8,7,4,6}; int[] array2=newGetSort.arraysort(array); for(int i:array2){ System.out.print(i+" "); } } }
五、两个单例之间的区别
“饿汉式”是在不管你用的用不上,一开始就建立这个单例对象。线程安全。
“懒汉式”是在你真正用到的时候才去建这个单例对象。线程不安全。
本文来自博客园,作者:涂勇军,转载请注明原文链接:https://www.cnblogs.com/tuyongjun/p/16475528.html
分类:
学习
标签:
01java基础知识
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤