Java实现:各类开发设计模式学习

版权声明: https://blog.csdn.net/Newabcc/article/details/80105167
单例模式 (Singleton Pattern)
定义: Ensure a class has only one instance, and provide a global point of access to it.( 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式有以下三个特点
一、单例类在整个系统中只能有一个实例
二、单例类必须自己创建自己的实例
三、单例类必须系统中其他对象提供这个实例
单例模式的好处就是:类只实例化一次,省资源,节省开销,提高速度
实现方式两种:
第一种:饿汉式,在类被加载时,静态变量 s_instance 会被初始化,此时类的私有构造子会被调用。
public class SingletonOne {
// 类加载时创建实例d.
private static final SingletonOne s_instance = new SingletonOne();

//此处写成私有方法可以防止用户在外面用new方法来产生多个对象。
private SingletonOne(){
}
//对外提供共有方法获取该实例对象
public( synchronized )static SingletonOne getInstance(){
   return s_instance;
}
}
第二种:懒汉式,对静态工厂方法使用了同步化,以处理多线程环境
public class SingletonTwo {
private static SingletonTwo s_getInstance = null;
//此处写成私有方法可以防止用户在外面用new方法来产生。
private SingletonTwo(){ 
}
//synchronized保证线程安全
public synchronized static SingletonTwo getInstance(){
   if ( s_getInstance == null){
        s_getInstance = new SingletonTwo();
   }
       return s_getInstance;
   }
}
补充什么是线程安全?
       如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码,如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为static的方式)。

未完待续。。。


猜你喜欢

转载自blog.csdn.net/Newabcc/article/details/80105167
今日推荐