设计模式之单例模式
使用场景:
在软件开发中,软件开发人员希望一些服务类且仅有一个实例供其他程序使用。如:打印机服务程序或对于系统配环境的一些控制,为了避免并发访问造成的不一致问题,希望仅为其他程序提供一个实例;又如,要生成唯一序列号的环境或创建一个对象需要消耗的资源过多(要访问IO和数据库等资源)。
对于整个系统使用的对象可以使用一个全局变量,在正确编写程序的情况下也可以保证唯一的一个实例,但如果系统随之不断扩张,就无法保证系统中有且只有一个实例。
单例模式的类图:
单例模式是一个比较简单的设计模式,其本质上就是自行实例化并始终向系统提供某个类的唯一实例。
单例模式实现代码:
懒汉模式:
public class Singleton{ private static Singleton singleton=null; private Singleton(){ } public static Singleton getSingleton(){ if(singleton=null) { singleton=new Singleton(); } return singleton; } }
该模式在多线程并发模式下是线程不安全的,所有以防高并发时出现问题,可以在getSingleton方法前加上synchronized关键字,当然也可以在getSingleton方法内加上synchronized关键字,这是针对java来说,如果用.net则要用lock锁来实现线程安全。
饿汉模式:
public class Singleton{ private static final Singleton singleton=new Singleton(); private Singleton(){ } public static Singleton getSingleton(){ return singleton; } }