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

定义

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值