java设计模式之单例模式的介绍
来源:互联网 发布:ubuntu拼音打不出中文 编辑:程序博客网 时间:2024/06/04 21:07
1.单例模式的简介
设计模式的概念:人们造房子的时候,最初是一座一座的建,慢慢的发现其实是一种套路可循的,现在人们在设计房子时,很多时候是根据之前设计过的模型直接拿来用,这种模型就是一种设计模式。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。其目的是为了代码的可重用性,让代码更容易被他人理解。
java中共有23中设计模式,下面介绍单例模式:
那么什么是单例模式呢?打个比方,就现代而言,很多人都会娶老婆,那么老婆只有一个就足够了,多了就会出问题。对于程序而言,有些对象只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。如果创造出多个实例,就会导致许多问题,如占用资源过多,不一致的结果等。那么如何保证整个应用中某个实例有且只有一个呢?这就要用到单例模式。
2.单例模式常分为两种:饿汉模式、懒汉模式。
2.1饿汉模式
建立两个类:Singleton.java及Test.java
Singleton.java:
public class Singleton{ }
一般情况下,要创建类的对象,应在Test.java的main方法中:
Singleton s1 = new Singleton( );Singleton s2 = new Singleton( );
这就创建了两个实例,但是现在要求要实现单例,所以第一步:将默认的构造方法设置为私有化,不允许外部直接创建对象。此时 Singleton.java的代码为:
Singleton.java:
public class Singleton{ private Singleton( ){ } }
此时问题来了,构造方法私有化以后,外部就无法创建类的实例,而现在单例模式要求要有一个实例,那解决方法是用自己的私有方法来创建实例,因此第二步:
Singleton.java:
public class Singleton{ private Singleton( ){ } //static是将其变为类的成员,外部可以访问到 private static Singleton instance = new Singleton( ); }
这样就可以在Test.java的main函数中使用Singleton.instance来实例化一个对象。
但是,我们都了解面向对象的封装,根据java的访问原则,不允许直接访问成员变量,因此第三步:提供一个用于获取实例的方法
Singleton.java:
public class Singleton{ private Singleton( ){ } //static是将其变为类的成员,外部可以访问到 private static Singleton instance = new Singleton( ); public static Singleton getInstance( ){ return instance; } }
总结一下,三步:
(1) 默认的方法设置为私有化,不允许外部直接创建对象
(2)创建类的唯一实例,使用private static修饰
(3)提供一个用于获取实例的方法,使用public static修饰
通过以上三步,便可以构建单例模式的饿汉模式,那么饿汉模式体现在哪儿呢?先想一下创建这个static的唯一实例的代码会在什么时候加载呢?答案是静态的成员是属于类所有的,因此当类被加载的时候就会创建这个实例,不管用户是否调用了这个实例,它都已经被加载了,所以它称为没吃饱,它要早些先吃饱,我们形象的称之为饿汉模式。
2.2懒汉模式:
懒汉模式和饿汉模式的区别仅在于在进行第二步操作时,只是声明实例,而没有去实例化,然后在第三步进行判断并返回,Singleton2.java的代码为:
Singleton2.java:
public class Singleton2{ private Singleton2( ){ } private static Singleton2 instance; //static是将其变为类的成员,外部可以访问到 public static Singleton2 getInstance( ){ if(instance == null){ instance = new Singleton2( ); } return instance; } }
因此从懒汉模式可以看出,当类被加载时,它并没有创建唯一的实例,而是当用户获取的时候,才真正的进行判断。
3.两者的特点及区别:
(1) 对于饿汉模式,加载类时比较慢,但运行时获取对象的速度比较快
(2) 对于懒汉模式,加载类时比较快,但运行时获取对象的速度比较慢
(3) 对于饿汉模式而言,它是线程安全的,对于懒汉模式,它是线程不安全的
0 0
- java设计模式之单例模式的介绍
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- 产品经理之原型协作
- TreeView 无法折叠问题
- Android开发环境搭建——Eclipse ADT bundle
- C/C++语言中的int等基本数据类型所能表示的最大值最小值
- 解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题
- java设计模式之单例模式的介绍
- Substring with Concatenation of All Words
- CSS table表格消除边框和表格中省略号隐藏超长文本
- 有关C++增量链接的解读:
- 使用github 配置bitbucket SSH
- 64位ubuntu上搭建android开发环境
- 关于内存泄漏的问题
- 使用烙铁焊锡
- 嵌入式GUI设计相关资料