23种设计模式之单例模式
来源:互联网 发布:广东网络干培训学院 编辑:程序博客网 时间:2024/06/07 01:47
一、什么是设计模式?
设计模式是一套被反复使用,多数人知晓的、经过分类编目的、代码设计经验总结。
目的:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。
二、为什么要使用单例模式?
有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。
如果创建了多个实例,就会导致许多问题,比如:占用过多的资源、不一致的结果。
三、什么是单例模式?
单例模式:保证整个应用中的某个实例有且只有一个。
四、单例模式一般分类?
单例模式一般分为:懒汉模式和饿汉模式。
五、代码实现。
饿汉模式:
package com.yc.singleton;/** * 饿汉模式 * @author HM * */public class Singleton {//1.将构造方法私有化,不允许外部直接创建对象private Singleton(){}//2.创建类的唯一实例,使用private static 修饰private static Singleton instance=new Singleton();//3.提供一个获取实例的方法public static Singleton getSingleton(){return instance;}}
测试及测试结果:
package com.yc.singleton;public class Test {public static void main(String[] args) {Singleton s1=Singleton.getSingleton();Singleton s2=Singleton.getSingleton();if(s1==s2){System.out.println("s1和s2是同一个实例");}else{System.out.println("s1和s2不是同一个实例");}}}
结果输出:s1和s2是同一个实例。
懒汉模式:
package com.yc.singleton;/** * 懒汉模式 * @author HM * */public class Singleton1 {//1.将构造方法私有化,不允许外部直接创建对象private Singleton1(){}//2.声明类的唯一实例,使用private static 修饰private static Singleton1 instance;//3.提供一个获取实例的方法,使用 public static修饰public static Singleton1 getSingleton(){if(instance==null){instance=new Singleton1();}return instance;}}
测试及测试结果:
Singleton1 s3=Singleton1.getSingleton();Singleton1 s4=Singleton1.getSingleton();if(s3==s4){System.out.println("s3和s4是同一个实例");}else{System.out.println("s3和s4不是同一个实例");}
结果输出:s3和s4是同一个实例。
总结:两种模式的特点比较:饿汉模式特点:加载类比较慢,但是运行时获取对象的速度比较快,而且是线程安全的;懒汉模式特点:加载类比较快,但是运行时获取对象的速度比较慢,是线程不安全的。
0 0
- 23种设计模式 之单例设计模式
- 23种设计模式之 单例
- 23种设计模式学习之东拼西凑-------单例模式
- 23种设计模式之单例模式(Singleton)
- 23种设计模式之单例模式
- c++23种设计模式之单例模式
- 23种设计模式简单概述之单例模式
- 23种设计模式之python实现--单例模式
- java 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之【单例模式】
- 黑马程序员-23种设计模式之单例模式
- 23种设计模式C++实例之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之单例模式
- 23种设计模式之——单例模式
- 采集(file_get_contents)
- process launch failed: failed to get the task for process 7680
- POJ 3176 Cow Bowling
- unity 读写sd卡
- SDUT 最少拦截系统 2075
- 23种设计模式之单例模式
- C++引用函数
- Orthogonal Matching Pursuit(OMP)正交匹配追踪算法学习笔记
- 华为OJ 初级:DNA序列
- curl进行传值(post)
- 5-2 最长连续递增子序列
- 字符串匹配 之 RK(Rabin-Karp)
- codeforces 414C 分治思想运用
- Git小白教程3---远程仓库克隆到本地