分享

5. 单例模式

 黎可图书馆 2013-09-02
一. 概念
单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

二. 实现
这是一个很简单的模式,以前也学过,所以简单写一个小例子。这个例子有两个单例类,一个是懒汉式单例类一个是饿汉式单例类。两个类都用来模拟打印机,由于打印机一次只能打印一个文件,所以需要使用单例模式。

Test.java
public class Test {
public static void main(String[] args) {
EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();
EagerSingleton eagerSingleton2 = EagerSingleton.getInstance();
eagerSingleton2.print("eagerSingleton2");
eagerSingleton1.print("eagerSingleton1");
LazySingleton lazySingleton1 = LazySingleton.getInstance();
LazySingleton lazySingleton2 = LazySingleton.getInstance();
lazySingleton1.print("lazySingleton1");
lazySingleton2.print("lazySingleton2");
}
}
测试类

EagerSingleton.java
public class EagerSingleton {
private static EagerSingleton eagerSingleton = new EagerSingleton();//饿汉式单例即在一开始就将本类初始化,在静态类中调用

private EagerSingleton(){
}
public static EagerSingleton getInstance(){
//通过此静态方法返回单例
return eagerSingleton;
}
//打印方法
public void print(String name){
System.out.println(name);
for(int i=0; i<40; i++){
System.out.print(i+" ");
}
}
}
这个是饿汉式单例。

LazySingleton.java
public class LazySingleton {
//饿汉式单例在一开始并不初始化
private static LazySingleton lazySingleton;
private LazySingleton(){
}
//由于这里存在线程安全问题,所以要加synchronized 
public synchronized static LazySingleton getInstance(){
//在此方法中先判断是否为空,如果为空则创建新对象,否则直接返回
if(lazySingleton == null){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
public void print(String name){
System.out.println(name);
for(int i=0; i<40; i++){
System.out.print(i+" ");
}
}
}

三. 总结
简单的单例模式,我已经会用了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多