单例设计模式

设计模式

对问题行之有效的解决方式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。其实是一种思想。java开发中有23种设计模式。总体来说分为三类:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
其实还有两类:并发型模式和线程池模式。

Singleton(单例模式)

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式的特点:
1.单例类只能有一个实例
2.单例类必须自己创建自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。

单例模式解决的问题:可以保证一个类在内存中的对象的唯一性。必须对于多个程序使用同一个配置信息对象时,就必须保证对象的唯一性。

如何保证对象的唯一性:
1.不允许其他程序用new创建该类对象;
2.在该类中创建一个本类实例;
3.对外提供一个方法让其他程序可以获取该对象。
对应的步骤:
1.私有化该类构造函数;
2.通过new 在本类中创建一个本类对象;
3.定义一个公有的方法,将创建对象返回。

class Single{//饿汉式
    static Single s=new Single();//创建一个本类对象
    private Single()//私有化构造函数
    {
    }
    public static Single getInstance(){//返回创建的对象
        return s;
    }
}
class static Single2{//懒汉式
    private static Single2 s=null;//声明一个本类对象
    private Single2()//构造函数私有化
    {}
    public static Single2 getInstance(){//返回创建对象
        if(s==null)
            s=new Single2();
        return s;
    }
}
class SignleDemo{
    public static void main(String[] args){
        Single ss=Single.getInstance();
        //Single ss=Single.s;  这种方式封装性不好,不可控
    }
}

饿汉式与懒汉式单例设计模式的区别:
1.饿汉式的特点是类一加载,对象就已经存在了;懒汉式的特点是类加载进来时并没有对象,只有调用了getInstance()方法时才会创建对象,因此懒汉式又叫延迟加载形式。
2.懒汉式被多线程并发访问时,有可能导致保证不了对象的唯一性,存在安全隐患;饿汉式没有这种隐患。
3.开发中用饿汉式较多,这是因为单例设计模式就是为了获取一个唯一的对象,所以对象一定会被创建,先加后加都可以,且饿汉式不存在安全隐患。

注意事项
1.不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应类的静态成员中。
2.不要将数据库连接做成单例,因为一个系统可能与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值