设计模式之单例模式

来源:互联网 发布:软件侵权的证据 编辑:程序博客网 时间:2024/06/03 20:52


单例模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

 

•    设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案

•    项目中合理的运用设计模式可以完美的解决很多问题

•    每种模式在现在中都有相应的原理来与之对应

•    每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案

面向对象的设计模式很多,但大家认为这23个模式是其它模式的基础

 

目的:

使得类的一个对象成为该类系统中的唯一实例

 

定义:

一个类有且仅有一个实例,并且自行实例化向整个系统提供

要点:

1、某个类只能有一个实例

2、必须自行创建实例

3、必须自行向整个系统提供这个实例

实现:

1、只提供私有的构造方法

2、含有一个该类的静态私有对象

3、提供一个静态的公有方法用于创建、获取静态私有对象

 

代码实现方案:

1、饿汉式

2、懒汉式


饿汉式 PK 懒汉式

1、饿汉式在类加载时就创建实例,第一次加载速度快; 懒汉式第一次使用时才进行实例化,第一次加载速度慢饿汉式:空间换时间

懒汉式:时间换空间

 

2、饿汉式线程安全;懒汉式存在线程风险解决方案:

1、同步锁                 3、静态内部类

2、双重校验锁          4、枚举

饿汉式代码实现:

public class singletonOne {
        //创建私有构造函数
        private singletonOne(){
               
        }
        //创建单例模式对象,静态
        private static singletonOne instance=new singletonOne();
        //提供一个public的静态方法,提供给其他类获取对象
        public static singletonOne getInstance() {
               return instance;
        }

懒汉式代码实现:

public class singletonTwo {
        //创建私有构造函数,防止其他类创建对象
        private singletonTwo() {
               
        }
        //静态对象
        private static singletonTwo instance=null;
        //共有静态方法提供其他类调用
        public static singletonTwo getInstance() {
               if(instance==null) {
                       instance=new singletonTwo();
               }
               return instance;
        }

 

优点

1、在内存中只有一个对象,节省内存空间

2、避免频繁的创建销毁对象,提高性能

3、避免对共享资源的多重占用

缺点

1、扩展比较困难

2、如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失

适用场景:

1、创建对象时占用资源过多,但同时又需要用到该类对象

2、对系统内资源要求统一读写,如读写配置信息

3、当多个实例存在可能引起程序逻辑错误,如号码生成器