Singleton单例模式

来源:互联网 发布:u盘安装linux卡在scsi 编辑:程序博客网 时间:2024/05/17 23:13

什么是单例模式?

概念

单例模式是一种常见的设计模式,可以使得某个类只有一个实例,自己创建该类实例并向外界提供该实例。

单例的三要素:

  1. 构造方法私有化,类的内部创建对象
  2. 静态属性
  3. 静态方法

单例模式优缺点

优点

  1. 数据共享
  2. 项目安全(配合同步实现)

缺点

  1. 并发性降低
  2. 增加耦合

为什么使用单例模式?

在某些条件下,使用单例模式可以控制类实例的数量,达到节约资源的目的,同时由于只有一个实例,可以实现通信的功能以及资源共享,不仅如此,单例模式配合线程的同步可解决并发访问中的安全问题。

在一些优先考虑安全性的程序中可以尝试使用单例。
例如:在一个银行系统中,如果不加限制,一个账户可以在多个端口同时对账户内的金额进行操作,这种情况是绝对不允许发生的。
所以当用户拿到一个money的单例对象(实现了线程同步),才能对账户中的金额进行操作,这样问题便解决了。

单例模式的缺点是非常明显的,降低程序的并发性,增加模块之间的耦合,所以单例的使用需要谨慎。

如何使用单例

实现单例模式的方式有很多种,常见的有饥汉模式和饱汉模式

饥汉模式

特点

  1. 加载类时就创建对象
  2. 创建对象后无法释放

实现

// 饥汉模式class Singleton1 {    // 静态属性    private static MoneyBean instance = new MoneyBean();    // 构造方法私有    private Singleton1() {    }    // 静态方法    public static MoneyBean getInstance() {        return instance;    }}//实现MoneyBean类的单例模式class MoneyBean {    private double balance;    public MoneyBean() {    }    public MoneyBean(double balance) {        this.balance = balance;    }    public double getBalance() {        return balance;    }    public void setBalance(double balance) {        this.balance = balance;    }}

饱汉模式(饥汉模式的改进)

特点

  1. 需要使用时创建对象

实现

// 饱汉模式(饥汉模式的改进)class Singleton2 {    // 静态属性    private static MoneyBean instance = null;    // 构造方法私有化    private Singleton2() {    }    // 静态方法    public static synchronized MoneyBean getInstance() {        if (instance == null) {            instance = new MoneyBean();            return instance;        }        return instance;    }}
原创粉丝点击