作为码农中的一员,需要不断的学习。我在学习之余把关于自己阅读《大话设计模式》的笔记和自己的一些总结 写成博客和大家分享,也希望采用这种方式记录自己的学习之旅。本文仅供学习交流使用,侵权必删。不用于商业目的,转载请注明出处。
单例模式
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
单例模式类图
Singleton
为 单例类,可以通过getInstance
方法创建自己的唯一实例。
单例模式代码
懒汉式 写法
// 单例模式
public class Singleton {
private static volatile Singleton instance;
// 对 构造函数 私有化 不让外界创建实例
private Singleton() {}
// 通过静态方法 返回 实例
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
public class Test {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2){
System.out.println("两个实例是一样");
}
}
}
饿汉式 写法
此写法保证了类在加载时就创建一个单例,在调用getInstance
方法之前 单例就已经存在。
// 单例模式
public class Singleton {
// 设置静态不可修改的变量,在类创建的同时创建
private static final Singleton instance = new Singleton();
// 私有化构造方法
private Singleton(){}
public static Singleton getInstance()
{
return instance;
}
}
单例模式的优缺点
优点
- 因为 Singleton 类封装它的唯一实例,所以它可以严格地控制客户怎样访问它以及何时访问它。
- 可以有效的控制实例数目。
- 减少一个全局使用的类的频繁创建与销毁,减少资源消耗。
缺点
- 由于没有抽象层,所以很难进行扩展扩展。
- 不适用于场景发生变化的对象。