打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
5. 单例模式
一. 概念
单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

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

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+" ");
}
}
}

三. 总结
简单的单例模式,我已经会用了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java单例模式的一个小结
单例模式
单例模式的两种方式的对比
设计模式之单例模式
设计模式 | 单例模式(singleton)
java线程安全的单例模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服