JAVA设计模式之:单例模式
2015-12-14 12:00
459 查看
在我们的项目中,有的对象我们有且只需要一个就可以了,如项目配置文件,操作数据库,操作文件等的工具类,线程池,缓存文件操作等。此时,我们就可以应用单例模式实现这些需求。单例模式分为两种 ,一种是我们俗称的饿汉模式,一种是我们俗称的懒汉模式。 首先我们看懒汉模式的实现方式:
/**
* 单例模式之懒汉模式:
* @description:
*/
public class LazierPattern {
/* 第一步:我们需要把构造方法私有化,让其它类不能用new的方式来创建此对象* */
private LazierPattern() {
}
/* 第二步:在类中创建本类的实例对象* */ private static LazierPattern instance;//此处并没有实例化 /* 第三步:提供其它类(外界)获取本类实例的公用方法,使用了public static修饰* */ public static LazierPattern getInstance() { //对当前对象做判断,如果不存在就创建对象,存在则直接返回对象 if(null==instance){//在要用的时候才实例对象,所以我们俗称懒汉模式 instance=new LazierPattern(); } return instance; }
}
再看下饥饿模式的实现类:
/**
* 单例模式之饿汉模式:
* @description:
*/
public class HungeryPattern {
/* 第一步:我们需要把构造方法私有化,让其它类不能用new的方式来创建此对象* */
private HungeryPattern() {
}
/* 第二步:在类中创建本类的实例对象* */ private static HungeryPattern instance = new HungeryPattern();//实例对象用static修饰,在加载类的时候就会实例出来 /* 第三步:提供其它类(外界)获取本类实例的公用方法,使用了public static修饰* */ public static HungeryPattern getInstance() { return instance; }
}
我们用一个测试类Test来测试我们的实例结果:
public class Test {
public static void main(String[] args) {
/* 测试饿汉模式* */
HungeryPattern lazy01 = HungeryPattern.getInstance();
HungeryPattern lazy02 = HungeryPattern.getInstance();
if (lazy01 == lazy02) {
System.out.println(“lazy01与lazy02是同一个对象”);
}
System.out.println(“———-分隔线—————-“);
/* 懒汉模式测试* */
LazierPattern hunger01 = LazierPattern.getInstance();
LazierPattern hunger02 = LazierPattern.getInstance();
if (hunger01 == hunger02) {
System.out.println(“hunger01与hunger01是同一个对象”);
}
}
}
控制台打印结果如下:
从打印结果可以看出,两种模式创建的多个对象都分别对应同一个对象。
最后我们对懒汉模式和饥饿模式作个比较:
懒汉模式:加载类时速度比较快(加载类时并不实例化对象),但运行时获取对象的速度就相对比较慢,而且是线程不安全的。
饥饿模式:加载类时速度比较慢(加载类时要实例化对象),但运行时获取对象的速度就相对比较快,是线程安全的。
相关文章推荐
- 图学java基础篇之集合
- Eclipse安装FindBugs,并进行静态代码扫描
- java格式化数字DecimalFormat
- MyEclipse设置默认的目光格式
- eclipse下svn切换地址
- Java魔法堂:String.format详解
- JAVA数据库连接池实现
- java web 下载urlconnection
- ECLIPSE崩溃启动不起来提示看log
- struts2的default.properties详解
- JavaMail发送和接收
- java读书笔记-java提交篇(1)
- JDK
- WebService:JDK发布service
- mvn工程转为eclipse工程
- Java安全:参考资料
- Java中的值传递和引用传递
- Java安全(JCA/JSSE):数字证书与SSL
- 【转】Spring AOP 实现之CGLIB
- 使用spring框架处理编码问题