浅谈设计模式——单例模式

来源:互联网 发布:杀马特网络四大家族 编辑:程序博客网 时间:2024/06/04 18:07

在实际的生活中,我们往往需要一个类只产生一种对象的情况。比如我的Windows系统的打印服务,同一时间智能为一台打印机提供服务;网站的访问统计器也是,一个网站只有一个访问统计器。也就是说,某些类在运行时智能创建一个对象,这就是我们所要讲的“单例模式”。

定义:单例模式就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例。

原理:单例模式可以分为饿汉式单例模式和懒汉式单例模式,饿汉式单例模式在类初始化的时候就已经创建了自身的对象,而懒汉式单例模式则是在要使用的时候才创建自身的对象。

实际代码如下:

 

//饿汉式单例模式public class Singleton1 {protected Singleton1() { }public static Singleton1 getInstance(){return instance;}private static Singleton1 instance = new Singleton1();}


//懒汉式单例模式public class Singleton2 {protected Singleton2(){}public static Singleton2 getInstance(){if(instance == null){instance = new Singleton2();}return instance;}private static Singleton2 instance = null;}


实际上通过上面的代码我们可以发现,单例模式的做法主要就是将类的构造函数不能是外部调用,这样也就保证了外部无法创建这个类的对象,从而只能使用该类的静态函数来创建对象。从而实现了单例模式。

使用时机:当系统要求一个类只有一个实例时,就需要使用单例设计模式。

优点:在单例模式中,客户调用类的实例时,只能调用一个公共的接口,这就为整个开发团队提供了一个共享的概念。

缺点:实现单例模式的类在实例化后,不能被别的类继承;在分布式系统中,当系统中的单例类被复制运行在多个虚拟机下时,在每一个虚拟机下都会创建一个实例对象,此时如果想知道具体哪个虚拟机下运行着哪个单例对象是很困难的,而且单例类很难实现序列化。

原创粉丝点击