设计模式之单例模式(1)

设计模式之单例模式

计划永远赶不上变化,年后由于各种原因,我辞职啦。从以前的开发管理角色变成基层程序猿,新到一个公司必须熟悉这个行业的业务知识和框架结构等等,好吧,就算给自己找一大堆借口,反正博客没有及时写。一直以来我都觉得java编程世界里面这两本书《设计模式》和《重构改善既有代码的设计》很重要,重点去学习里面的一些编程的思想,开源比较有名的框架spring里面就很多设计模式存在其中,,值得我们去学习。关于设计模式,网上已经有很多资料啦,因为最近和朋友一起在做一些开源方面的框架,觉得有必要重新温故一下,主要让自己更加熟悉,同时有人觉得不错的话,可以共同交流。单例模式和工厂模式应该大家最为熟知的设计模式,同时也是使用频率比较高的,看起来比较简单的,从最简单的开始学习,一步一步的提升,符合人的学习习惯。

1.1什么是设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的:为了可重用代码、让代码更容易被他人理解、保证代码可靠性。就如我们现实生活中(打仗使用战争的战阵、三六计,公司的结构模式、管理模式)。

1.2 什么是单例模式

单例模式,我们可以从字面的意思理解,就是只有一个实例存在的意思。就像现在国家的主席(总统),以及合法的老婆,这些只会存在一个。那么在java的世界里面,那些东西或者场景要求对象必须为单例呢?比如配置文件,工具类,线程池,日志,数据库连接等等,在实际开发中都要求是只有一个实例存在的,这时候我们就会用到单例模式。单例模式有两种饿汉模式和懒汉模式。

单例模式的特点:

(1)有且只有一个实例存在

(2)构造方法私有化,只能自己创建唯一的实例

(3)以自己实例为返回值的静态的公有的方法给外部进行调用

1.3什么是饿汉模式

编程世界里的好多名词概念都是来自现实生活,非常形象生动。所以我们有可以从字面的意思理解,就是处于饥饿状态的流浪汉,专业一点就是在类加载的时候就创建类的唯一的一个实例,不会等到你去调用的时候再去创建类的实例。代码如下:

packagecom.pattern.singleton; /** * 单例模式之饿汉模式(在类加载的时候就创建了类的实例) * 应用场景:配置文件的读取,工具类,线程池,日志,数据库连接 * 作用:保证有且只有一个实例存在 * @author wz * */public class EagerSingleton { //1.创建一个类的实例,并且定义为private static 的类 private static EagerSingleton singleton = new EagerSingleton(); //2.构造方法私有化,防止外部调用直接new一个实例 private EagerSingleton(){} //3.以自己实例为返回值的静态的公有的方法给外部进行调用 public static EagerSingleton getInstance(){return singleton; }}

1.4什么是懒汉模式

懒汉模式就是等到你去调用的时候再去创建类的实例,并且只会在第一次进行创建类的实例。代码如下:

packagecom.pattern.singleton; /** * 单例模式之懒汉模式(在调用类第一次时候创建类的实例) * 应用场景:配置文件的读取,工具类,线程池,日志,数据库连接 * 作用:保证有且只有一个实例存在 * @author wz * */public class LazySingleton { //1.声明一个类的实例,并且定义为private static private static LazySingleton lazySingleton = null; //2.构造方法私有化,防止外部调用直接new一个实例 private LazySingleton (){} //3.以自己实例为返回值的静态的公有的方法给外部进行调用 public static LazySingleton getInstance(){if(lazySingleton == null){lazySingleton = new LazySingleton();}return lazySingleton; } }

1.5 “饿汉模式” VS “懒汉模式”

主要区别如下:

(1)饿汉模式在加载类的时候比较慢,但运行时获取对象的速度比较快;懒汉模式在加载类的时候比较快,但运行时获取对象的速度比较慢;

(2)饿汉模式是线程安全的,懒汉模式是非线程安全的。一般推荐使用饿汉模式。

最可怕的敌人,就是没有坚强的信念。

设计模式之单例模式(1)

相关文章:

你感兴趣的文章:

标签云: