博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式之单例模式
阅读量:6308 次
发布时间:2019-06-22

本文共 1558 字,大约阅读时间需要 5 分钟。

学习java有一段时间了,想更高的使用java,就准备学习些设计模式。设计模式是一种经验,或者说是一种模型,与无头脑的编写代码与使用设计模式相比,设计模式更有效率和规范。

今天介绍单例模式,单例模式就是说,应用的全局某个类只有一个实例,好比你只有一个丈夫或者老婆即可,多了会出乱子。主要用于工具类,线程池等场景。。。

单例模式分为饿汉模式和懒汉模式。

饿汉模式:

1 public class Ehan { 2  3     //饿汉模式的步骤 4  5     // 1.对该类的构造方法私有化,不允许外部创建对象。 6     private Ehan() { 7     } 8     // 2.在本类中创建自己的实例化对象 9 10     private static Ehan ehan = new Ehan();11 12     // 3.提供一个外部调用实例的方法13 14     public static Ehan getEhan() {15         return ehan;16 17     }18 19 20 }

测试:

1     public static void main(String[] args) { 2         // 测试饿汉模式 3  4         Ehan ehan1 = Ehan.getEhan(); 5         Ehan ehan2 = Ehan.getEhan(); 6         if (ehan1 == ehan2) { 7             System.out.println("ehan是同一个实例"); 8         } 9 10 11 12 }

结果:打印出ehan是同一个实例

懒汉模式:

1 public class LanHan { 2  3  4     //1. 私有化构造方法 5     private LanHan() { 6     } 7  8     //2. 声明本类的实例 9     private static LanHan lanHan;10 11     //3. 提供外部调用的方法12     public static LanHan getLanHan() {13 14         if (lanHan == null) {15             lanHan = new LanHan();16         }17         return lanHan;18 19     }20 21 }

 

测试:

1     public static void main(String[] args) { 2  3         // 测试懒汉模式 4  5         LanHan lanHan1 = LanHan.getLanHan(); 6         LanHan lanHan2 = LanHan.getLanHan(); 7  8         if (lanHan1 == lanHan2) { 9             System.out.println("lanHan是同一个实例");10         }11 12 13     }14 15 }

结果:lanHan是同一个实例

 

以上就是两种单例模式的代码实现,其中有些区别:

* 饿汉模式是先实例化对象,等着别人来调。所以加载类时速度慢,运行期间调用时速度快。
* 懒汉模式是别人调用时,再创建对象,所以加载类时快,调用时慢。
厚积薄发,不忘初衷

 

转载于:https://www.cnblogs.com/grasser/p/8484078.html

你可能感兴趣的文章
基于epoll封装的事件回调miniserver
查看>>
天猫高管全面解读大快消2018新零售打法
查看>>
idea springboot热部署无效问题
查看>>
第八章 进程间通信
查看>>
HttpSession接口中的方法(Jsp中的session类的用法)
查看>>
「镁客早报」AI可预测心脏病人死亡时间;机器人开始在美国送外卖
查看>>
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
查看>>
物联网全面升级,十年内推动工业进入智能化新阶段
查看>>
spring-通过ListFactory注入List
查看>>
一种基于SDR实现的被动GSM嗅探
查看>>
阿里云ECS每天一件事D1:配置SSH
查看>>
SQL Server 性能调优(性能基线)
查看>>
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
[Java Web]servlet/filter/listener/interceptor区别与联系
查看>>
POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
查看>>
从零开始学MVC3——创建项目
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>