设计模式:懒汉式和饿汉式
来源:互联网 发布:vb九九乘法表右上三角 编辑:程序博客网 时间:2024/05/29 07:27
目录:
一、单例的简介
二、单例的优缺点
三、单例的特点
四、单例的代码
———————————————————————————————————————
一、单例的简介
下面对单例模式的懒汉式与饿汉式进行简单介绍:
1、饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
2、懒汉式:当程序第一次访问单件模式实例时才进行创建。
如何选择:如果单例模式实例在系统中经常会被用到,饿汉式是一个不错的选择。反之如果单例模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择。
二、单例的优缺点
主要优点:
1、提供了对唯一实例的受控访问。
2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
3、允许可变数目的实例。
主要缺点:
1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
2、单例类的职责过重,在一定程度上违背了“单一职责原则”。
3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
三、单例的特点
1、构造方法私有
2、内部对象私有
3、提供返回对象的函数公有
四、单例的代码
饿汉式和懒汉式代码:
package Single;public class single { public static void main(String[] args) { hungrySingle s1 = hungrySingle.getStudent(); hungrySingle s2 = hungrySingle.getStudent(); System.out.println(s1 == s2); lazySingle p1 = lazySingle.getPerson(p); lazySingle p2 = lazySingle.getPerson(p); System.out.println(p1 == p2); }}//饿汉式class hungrySingle{ private hungrySingle(){} private static hungrySingle s = new hungrySingle(); public static hungrySingle getStudent(){ return s; }}//懒汉式class lazySingle{ private lazySingle(){} private static lazySingle p = null ; public static lazySingle getPerson(lazySingle p){ if(p==null){ return new lazySingle(); } return p; }}
懒汉模式在使用时,容易引起不同步问题,所以应该创建同步”锁”,代码如下
class Single1 { private static Single1 s = null; public Single1() { } //同步函数的demo public static synchronized Single1 getInstance() { if (s == null) s = new Single1(); return s; } //同步代码快的demo加锁,安全高效 public static Single1 getInStanceBlock(){ if(s==null) synchronized (Single1.class) { if(s==null) s = new Single1(); } return s; }}
0 0
- 设计模式:懒汉式和饿汉式
- 设计模式-饿汉式、懒汉式
- 设计模式-单例模式之饿汉式和懒汉式
- 设计模式------单例模式之饿汉式和懒汉式
- 黑马程序员-单例设计模式:懒汉式和饿汉式
- 单例设计模式(饿汉式和懒汉式)
- 单例设计模式(懒汉式和饿汉式区别)
- 《单例设计模式之饿汉式和懒汉式》
- Java单例设计模式(饿汉式和懒汉式)
- java设计单例模式【饿汉式和懒汉式】
- Java---15---单例设计模式:---饿汉式和懒汉式
- 单例设计模式中懒汉式和饿汉式
- 黑马程序员-单例设计模式:“饿汉式”和“懒汉式”
- 单例设计模式-饿汉式和懒汉式
- 单例设计模式!饿汉式和懒汉式!
- 单例设计模式(饿汉式和懒汉式)
- 单例设计模式-懒汉式和饿汉式
- 单例设计模式之饿汉式和懒汉式
- springsession使用redis
- +=隐式类型转换
- 初入职场-17加油!
- TextView相关属性
- C++实现单例的5种方法总结
- 设计模式:懒汉式和饿汉式
- MySQL分表处理的实现方法
- 一、2016年终总结
- 指针函数与函数指针示例
- ETL 自己的程序bug
- < meta > 元素 属性简介
- xcode配置问题
- [00316]结合时区的日期操作
- yyyy-MM-dd类型的日期字符串比较大小