单例模式
2016-05-15 12:29
260 查看
问题描述:设计单例模式的实现。
分析:单例模式,即要求在整个程序中,某个类有且只有一个实例对象。因为在有些时候,我们只需要类有一个对象就行,这个时候我们就可以把这个类采用单例模式实现,
例如系统的一些对象,比如时间等对象就可以设计为单例模式。
常见的单例模式有两种类型:饿汉模式和懒汉模式。具体区别如下:
饿汉模式:加载类时比较慢(因为要创建对象),运行时获取对象的速度比较快,线程安全
懒汉模式:加载类时比较快(因为不用创建对象),运行时获取对象的速度比较慢,线程不安全
为了便于读者理解,我写出了如下Java代码,分别实现了饿汉模式和懒汉模式,读者可以结合代码理解:
饿汉模式如下:
懒汉模式如下:
测试代码如下:
输出结果为:
s1和s2是同一个实例
s3和s4是同一个实例
分析:单例模式,即要求在整个程序中,某个类有且只有一个实例对象。因为在有些时候,我们只需要类有一个对象就行,这个时候我们就可以把这个类采用单例模式实现,
例如系统的一些对象,比如时间等对象就可以设计为单例模式。
常见的单例模式有两种类型:饿汉模式和懒汉模式。具体区别如下:
饿汉模式:加载类时比较慢(因为要创建对象),运行时获取对象的速度比较快,线程安全
懒汉模式:加载类时比较快(因为不用创建对象),运行时获取对象的速度比较慢,线程不安全
为了便于读者理解,我写出了如下Java代码,分别实现了饿汉模式和懒汉模式,读者可以结合代码理解:
饿汉模式如下:
/* * 饿汉模式的实现Singleton1 */ public class Singleton1 { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton1(){ } //2.创建类的唯一实例 private static Singleton1 instance=new Singleton1(); //3.提供一个用于获取实例的方法 public static Singleton1 getInstance(){ return instance; } }
懒汉模式如下:
/* * 懒汉模式的实现Singleton2 */ public class Singleton2 { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton2(){ } //2.创建类的唯一实例 private static Singleton2 instance; //3.提供一个用于获取实例的方法 public static Singleton2 getInstance(){ if(instance==null) instance=new Singleton2(); return instance; } }
测试代码如下:
public class Test { public static void main(String[] args) { // TODO 自动生成的方法存根 Singleton1 s1=Singleton1.getInstance(); Singleton1 s2=Singleton1.getInstance(); if(s1==s2){ System.out.println("s1和s2是同一个实例"); } else System.out.println("s1和s2不是同一个实例"); Singleton2 s3=Singleton2.getInstance(); Singleton2 s4=Singleton2.getInstance(); if(s3==s4){ System.out.println("s3和s4是同一个实例"); } else System.out.println("s3和s4不是同一个实例"); } }
输出结果为:
s1和s2是同一个实例
s3和s4是同一个实例
相关文章推荐
- iOS开发(OC)——单击手势与tableView的点击冲突
- spring配置-bean部分
- Java--线程的创建方式(1)
- 数据库———聚合函数与分组
- 周末心里话
- 关于java.lang.reflect.InvocationTargetException
- [J2SE]s02e09.List的实现类ArrayList等(课后练习)
- Catch That Cow 2007年USACO(最短路)
- 控制并发线程数的Semaphore
- tomcat下log4j接管日志并按日期分割
- MATLAB画ROC曲线,及计算AUC值
- 第十二周
- 新手学习opencv--基于Hog的视频行人检测
- 第十一周项目5——摩托车继承自行车和机动车
- python之模块之shutil模块
- 云计算发展史
- Android 开源项目浅读-------SwipeMenuListView-重写,第五章,滑动弹出,放手关闭功能实现
- 第八周项目一(2)-数组作数据成员(文件读取)
- 第十一周学习进度
- 机电传动控制8