单例模式---孤独的寂寞
2016-12-04 21:12
267 查看
声明:文章内容根据大牛博客的内容,自己理解后,给自己做的学习笔记,文末会附上大牛博客地址链接。有需要沟通交流的可加我QQ群:425120333 说真的,看懂设计模式了,和会用,在这之间还差了N行代码,每个设计模式都是前人经验的结晶,先去理解再去用(千万别在代码中强行使用)。 首先,就是单例模式,顾名思义,就是一个类在整个运行期间只会有一个实例,每次获取到的都是同一实例。实现单例模式的方式各种各样, 每种方式都有各自的特点,需要根据实际情况进行选择。
/** * @author caiqibin * @introduce:类被调用就创建(可能只是用到类中其他的静态方法),可能浪费空间 * */ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getSingleton() { return singleton; } } /** * @author caiqibin * @introduce:单线程下可行,多线程下不能保证单例 * */ class SingletonA { private static SingletonA singleton; private SingletonA() { } public static SingletonA getSingleton() { if (singleton == null) { singleton = new SingletonA(); } return singleton; } } /** * @author caiqibin * @introduce:多线程下也可行,但是加了同步,多了很多等待,浪费时间 * */ class SingletonB { private static SingletonB singleton; private SingletonB() { } public synchronized static SingletonB getSingleton() { if (singleton == null) { singleton = new SingletonB(); } return singleton; } } /** * @author caiqibin * @introduce:双重检测校验,一般来说都可以,而且不会有问题。 * 创建对象三步走:1分配内存空间,2初始化构造器,3将对象指向分配的内存地址(因为jvm的指令重排序 * ,2、3的顺序无法保证)所以导致可能出现问题 */ class SingletonC { private static SingletonC singleton; private SingletonC() { } public static SingletonC getSingleton() { if (singleton == null) { synchronized (SingletonC.class) { if (singleton == null) { singleton = new SingletonC(); } } } return singleton; } } /** * @author caiqibin * @introduce:一定不会有问题(要jdk1.5以上才支持volatile关键字) * */ class SingletonD { private static volatile SingletonD singleton; private SingletonD() { } public static SingletonD getSingleton() { if (singleton == null) { synchronized (SingletonD.class) { if (singleton == null) { singleton = new SingletonD(); } } } return singleton; } } /** * @author caiqibin * @introduce:最好的实现方式,没有限制,不会浪费 * */ class SingletonBest { private SingletonBest() { } public static SingletonBest getSingleton() { return CreateSingletonBest.singleton; } private static class CreateSingletonBest { private static SingletonBest singleton = new SingletonBest(); } }
这里我总共列出了6中,最后这种是最优的,而且没限制。当然,实际情况下还有其他写单例的方法,水平有限,还知道其他的请给我留言学习下,谢谢了! 参考大牛博客链接:http://www.cnblogs.com/zuoxiaolong/p/pattern2.html
相关文章推荐
- 在寂寞中享受孤独(转)
- 我是一棵孤独的树,千百年来寂寞地等待,只为有一天你从路边走过时为你倾倒……
- 寂寞的眼泪,孤独做主:伤感QQ个性日志
- 写尽自己一个人的孤独却写不出心里的寂寞
- 给好友选择性格标签的添加和删除(如:寂寞, 孤独,一个人。。。)根据cell里面的内容确定cell大小
- [转]寂寞的数学家和不孤独的素数
- 写尽自己一个人的孤独,却写不出心里的寂寞
- 写尽自己一个人的孤独,却写不出心里的寂寞
- 孤独但不寂寞的日子
- 寂寞冬之孤独
- 孤独与寂寞
- 孤独和寂寞也是一种美
- 写尽自己一个人的孤独,却写不出心里的寂寞
- 孤独与寂寞
- 宁愿我孤独,不愿你寂寞
- 孤独,寂寞,无聊
- 压抑,无聊,孤独,寂寞通通到来!
- 写尽自己一个人的孤独,却写不出心里的寂寞
- 大连创业圈:孤独与寂寞并存
- 孤独与寂寞的存在