java设计模式之单列模式

  个人总结了下单列模式,如有不到之处还望多多指教。

  单列模式是开发和面试过程中常会被问到的设计模式,单列模式用在设计一些工具类的时候可能会被频繁调用时。比如说一个网站统计在线人数,把一个计数器存放在内存或者数据库中,当有人登陆的时候取出来加一再放回去,有人退出登陆的时候取出来减一再放回去,但是当有两个人同时登陆的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,所以需要一个全局变量的对象给全部人使用,只需要new出一个实例对象,这就是单例模式的应用,并且单例模式节省资源,因为它控制了实例对象的个数,并有利于gc回收。

  单列的好处:是为了节省重复创建对象所带来的内存消耗,从而提高效率。

   单列设计模式:

1、构造方法私有化
2、声明一个本类的对象

3、给外部提供一个静态方法获取对象实例

   两种单列模式:

1.饿汉式:在类加载后,对象被创建,到程序结束后释放。
缺点:占用内存时间长

优点:提高效率

2.懒汉式:在第一次调用方法时,对象被创建,到程序结束后释放。
缺点:效率低些(相对饿汉式)
优点:占用内存时间短(相对饿汉式)

饿汉式代码:

public class Test {
    public static void main(String[] args) {
        Singleton1 s = Singleton1.getInstance();
        s.print();
        
    }
}

/**
 * 饿汉式
 */
class Singleton1{
    private Singleton1(){}
    private static  Singleton1 s = new Singleton1();
    public static Singleton1 getInstance(){
        return  s;
    }
    public  void  print(){
        System.out.println("测试方法,饿汉式!");
    }
}

懒汉式代码:

public class Test {
    public static void main(String[] args) {
        Singleton2 s = Singleton2.getInstance();
        s.print();

    }
}


/**
 * 懒汉式
 */
class Singleton2{
    private  Singleton2(){}
    private static  Singleton2 s;

    public static Singleton2 getInstance(){
        if(s==null){
            s = new Singleton2();
        }
        return  s;
    }
    public  void print(){
        System.out.println("测试方法,懒汉式!");
    }
}

注:
可以使用构造方法私有化+静态方法来代替单列模式。但是推荐使用单列模式,因为从内存的角度来考虑,单列模式占用内存相对较小。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值