java设计模式(1)--单例模式
来源:互联网 发布:python while循环 编辑:程序博客网 时间:2024/04/29 19:27
(一)单例模式
- 要点:(1)各个类都只有一个实例。(2)它必须自行创建这个唯一实例。(3)它必须自行向其他对象提供该实例。
- 本质:控制实例的数量。
- 应用场景:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象等。
(二)单例模式主要分为:懒汉式单例、饿汉式单例两种。
1. 懒汉式(延迟加载法):以时间换空间
public class Singleton {//1.收回外部实例化Singleton类的权限private Singleton(){};//3.声明一个静态对象来保存实例private static Singleton single = null;//2.主动向外部提供获取该实例的方法public static Singleton getInstance(){//4.判断实例是否已实例化if(single == null){//5.未实例化则实例化single = new Singleton();}return single;}}
优点:资源利用率高,不执行getInstance就不会被实例。
缺点:线程不安全,并发环境下可能出现多个实例;每次都需要判断是否已实例化,速度上稍慢。
改进方案:public class Singleton {//1.收回外部实例化Singleton类的权限private Singleton(){};//3.声明一个静态对象来保存实例private static Singleton single = null;//2.主动向外部提供获取该实例的方法(加上synchronized锁达到线程安全)public static synchronized Singleton getInstance(){//4.判断实例是否已实例化if(single == null){//5.未实例化则实例化single = new Singleton();}return single;}}
改进:线程安全。
缺点:synchronized的使用增加了不必要的资源开销。
2. 饿汉式(预先加载法):以空间换时间
public class Singleton {//1.收回外部实例化Singleton类的权限private Singleton(){}; //3.运行即初始化实例private static Singleton single = new Singleton();//2.主动向外部提供获取该实例的方法public static Singleton getInstance(){return single;}}优点:线程安全;运行即进行初始化,所以调用实例速度快。
缺点:资源利用率不高,可能存在永远用不到的实例。
测试:public class main {public static void main(String []args){Singleton single1 = Singleton.getInstance(); //获取实例1Singleton single2 = Singleton.getInstance(); //获取实例2if(single1 == single2) //判断两个实例是否是同一实例{System.out.print("同一实例");}else{System.out.print("不同实例");}}}运行结果:同一实例
- java(1) 设计模式-单例设计模式
- Java设计模式-1-单例模式
- java设计模式(1) - 单例模式
- java设计模式1 单例模式
- Java设计模式(1)单例模式
- Java设计模式(1) 单例模式
- JAVA设计模式(1)----单例模式
- java设计模式(单例模式)
- JAVA设计模式(单例模式)
- 设计模式----单例模式(java)
- (设计模式)单例模式-java
- java设计模式(1)--单例模式
- Java设计模式笔记(1)单例模式
- Java设计模式之单例模式(1)
- java设计模式之单例模式(1)
- 设计模式(java)1——单例模式
- Java设计模式(1)-单例模式
- JAVA常用设计模式(1)单例模式
- 一些容易出错的小地方
- C#中String.Format格式说明(如字符串补0 string s="a";s.PadLeft(2,'0'))
- 倾诉孤独真是伤感日志:我对你的爱净重21克
- Android 轻松实现语音识别
- SQL的简单查询实例教程
- java设计模式(1)--单例模式
- android intent隐式调用之一个应用程序启动另一个应用程序
- 木偶娃娃的伤感日志推荐:只是一场赢不了的游戏
- Android 开发环境安装配置手册
- oracle优化(自网络)
- 全面接触Java集合框架
- 我的大学,自己的期望
- Log4J日志管理类使用详解
- Java回调函数的理解