zoukankan      html  css  js  c++  java
  • 单例设计模式

    今天我们学习了23种设计思路中的单例,这个主要是要让我们的类成为一个单例的,
    也就是只能有一个对象,只能创建出来一个对象,也就是new关键字只能出现一次,
    因为new的意思就是创建,只有他创建一次就能保证他是唯一的,而且不能我们程
    序员自己创建,只能让程序来创建,单例有两种模式,我们先说饿汉模式,饿汉模式
    是先要把本类的构造方法设置成private,因为只有隐藏掉了以后,才能保证在别的类
    不能创建对象,然后我们要在本类写一个静态属性把本类给new出来,以student为例
    peivate static Student stu=new Student();这么写的主要原因是因为出了这个类就
    不能创建了,所以我们在这里给他创建出来,但是只有这个是不行的,因为这个对象
    现在在本类中,我们必须要把它给扔出来,因为要让别的类用,所以我们要进行下一
    步的操作,就是写一个公共的静态方法在这个方法里把上面创建的对象给return出去
    这样就能保证他只创建了一个对象,而且把这个对象给扔了出去,因为它定义属性是
    定义的静态的,所以类一执行对象立马创建了,因为创建的快,所以又称为饿汉式模
    式,这种方式因为他构造方法是私有的并且他在自己的类里创建的对象,所以他的对
    象是唯一的,还有就是他的线程是安全的。这就是饿汉式;以下是实例
     
     
     
    还有一种懒汉式,它跟
    懒汉式不一样的是,它定义属性的时候只有定义没有创建,它在下面的方法里先判断
    一下它不是null为了避免它再次调用的时候重复创建,如果不是null才创建,但是因
    为懒汉式是线程不安全的,所以我们可以在方法上添加一个锁,但是如果在方法上加
    会把整个方法给包住,实在是没有必要,所以我们只需要在某一段代码上加上锁即可,
    但是因为线程是并发的,比如一个对象通过了if判断进入了锁里面,但是他还没有创建
    对象它的时间到了,这时另一个对象通过了if方法,进入了锁里面,这样就会导致好几
    个线程同时进入了对象里,解决办法就是在锁的里面再加一个if判断,判断它是否为
    null这样就算第一个进来了,第二因为通过不了锁,所以只能等第一个出来,这样
    就实现了线程安全,以下是实例
     
  • 相关阅读:
    tyvj 1031 热浪 最短路
    【bzoj2005】 [Noi2010]能量采集 数学结论(gcd)
    hdu 1394 Minimum Inversion Number 逆序数/树状数组
    HDU 1698 just a hook 线段树,区间定值,求和
    ZeptoLab Code Rush 2015 C. Om Nom and Candies 暴力
    ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
    ZeptoLab Code Rush 2015 A. King of Thieves 暴力
    hdoj 5199 Gunner map
    hdoj 5198 Strange Class 水题
    vijos 1659 河蟹王国 线段树区间加、区间查询最大值
  • 原文地址:https://www.cnblogs.com/youzhong/p/10452885.html
Copyright © 2011-2022 走看看