单例模式双重检查锁机制
单例模式的特点: 首先,单例模式使类在程序生命周期的任何时刻都只有一个实例, 然后,单例的构造函数是私有的,外部程序如果想要访问这个单例类的话, 必须通过getInstance()来请求(注意是请求)得到这个单例类的实例。 有的时候,总是容易把全局变量和单例模式给弄混了,下面就剖析一下全局变量和单例模式相比的缺点: 首先,全局变量呢就是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局
单例模式的特点: 首先,单例模式使类在程序生命周期的任何时刻都只有一个实例, 然后,单例的构造函数是私有的,外部程序如果想要访问这个单例类的话, 必须通过getInstance()来请求(注意是请求)得到这个单例类的实例。 有的时候,总是容易把全局变量和单例模式给弄混了,下面就剖析一下全局变量和单例模式相比的缺点: 首先,全局变量呢就是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局
什么是抽象工厂模式抽象工厂模式(Abstract Factory Design Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 是时候使用抽象工厂模式啦抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或者关心)实际产出的具体产品是什么。这样一来,客户就从具体的产品中被解耦。 抽象工厂模式类图 Client客户的代码中只需要涉及抽象工厂,运行时
什么是工厂方法模式工厂方法模式(Factory Method Design Pattern)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。 是时候从new中解放出来啦当我们看到new,就会立马想到具体。是的,的确是这样的,我们在使用new创建一个对象的时候,我们实际上是针对实现编程,而不是针对接口。设计模式中有一个原则就是针对接口编程而不是针对实现编
什么是装饰者模式装饰者模式(Decorator Desgin Pattern)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 给爱用继承的人一个全新的设计眼界我们会再次讨论继承滥用的问题。我们之前说过,设计模式有一个原则就是多用组合 ,少用继承。那么在本设计模式中,我们将讨论如何使用对象组合的方式,在运行时动态地装饰类。这样我们就可以在运行时不修改任何底层代码的情况
最近在看林清玄的《从容的底气》,感受颇多。先说说我为什么读文学吧,我总是在想,一天到晚搞技术,人会不会变得很NERD?对我来说,答案是肯定的。不管和家人聊天还是和女友聊天,总是会心不在焉,心里想的一直都是这段代码里面为什么一直报空指针,难道是我代码中Java多线程机制这一块出问题了吗?亦或是这个网站不错,讲设计模式挺全,Python的,Javascript的都有,挺好的。。。然后就草草地和家里人
在你使用u盘拷贝东西到win电脑下使用文件时是不是经常发现在win下许多文件夹下都有.DS_Store名称的文件是不是觉得很烦 ,其实.DS_Store是OS X系统生成的文件它包含了与文件夹相关的信息 ,但是因为OS X系统默认是隐藏这类文件所以在Mac下交互使用这些文件是没有任何问题的 。 1.禁止这个文件生成的方法:打开 “终端” (finder -应用程序-实用工具-终端) 输入下面
决定开始Python之路了,利用业余时间,争取更深入学习Python。编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的。所以今天下午我根据PEP8整理了一份,以后都照此编码了,还会持续更新。 PEP8 Python编码规范一 代码编排 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。 每行最大长度79,换行可以使用反斜杠,最好
Guava中的反射工具类我们很多时候需要在运行时获取相关类的信息,比如它的方法有哪些,它的父类是什么,它的字段有哪些等等。其实这些JDK已经为我们做得很好了,我个人还是比较喜欢欣赏JDK里面做的反射处理的。不过这里为什么要讲Guava里面的反射呢?因为Guava对于JDK做了大量的封装和优化,最简单的比如动态代理,以前我们JDK里面要写一大堆,现在用Guava就能很方便的实现了。下面分别介绍Gua
Guava中的数学数学处理有很多种方式,JDK里面也为我们提供相应的方法,为什么这里我们需要使用Guava里面方法呢?主要由以下几点原因: Guava Math针对各种不常见的溢出情况都有充分的测试;对溢出语义,Guava文档也有相应的说明;如果运算的溢出检查不能通过,将导致快速失败; Guava Math的性能经过了精心的设计和调优;虽然性能不可避免地依据具体硬件细节而有所差异,但Guava