设计模式笔记(七)设计模式之一--单例模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cc907566076/article/details/78650169

定义

Singleton Pattern
我们都知道一个类class文件如果是public的话,可以通过new关键字来以class为模板,创建很多真实的对象。但是单例模式要求:一个类创建出一个对象。

一般形式

通过private修饰构造方法,控制这个类只能让自己创建一个对象。只能通过方法获得这个对象的共享实例。

//单例模式一般写法(饿汉模式)
public class SingletonClassA {
     //仅拥有自己的一个实例
     private static final  SingletonClassA singletonA = new SingletonClassA();

     //限制产生多个对象
     private SingletonClassA(){}

     //通过方法来获得这个实例而非构造方法
     public static SingletonClassA getSingletonClassA() {
         return singletonA;
     }

}

适用场景

如果要求一个类有且仅有一个对象,如果出现多个对象就会出现不良反应,就可以采用单例模式。

例如我们的项目中数据库连接一般只有一个。

优点

很明显是减少了内存消耗。

缺点

1.扩展代码很困难,只能修改源代码
2.不利于测试
3.高并发情况下,注意单例模式的线程同步问题

例如懒汉模式下的单例:

//单例模式一般写法
public class SingletonClassA {
     //仅拥有自己的一个实例
     private static final SingletonClassA singletonA = null;

     //限制产生多个对象
     private SingletonClassA(){}

     //通过方法来获得这个实例而非构造方法
     public static SingletonClassA getSingletonClassA() {
         if(null == singletonA) {
             return new SingletonClassA();
         }
         return singletonA;
     }

}

因为获得singletonA实例的方法getSingletonClassA非同步的,这就可能导致两个线程获得的实例并非同一个。一般是加上synchronized。推荐使用饿汉模式来做。

4.java中如果类实现了Cloneable接口,实现clone方法是可以复制出一个新的对象的。所以尽量不要这样做。

猜你喜欢

转载自blog.csdn.net/cc907566076/article/details/78650169