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

来源:互联网 发布:巴黎世家机车包 知乎 编辑:程序博客网 时间:2024/05/16 10:29

定义

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方法是可以复制出一个新的对象的。所以尽量不要这样做。

阅读全文
0 0