设计模式

来源:互联网 发布:中国也门撤侨事件 知乎 编辑:程序博客网 时间:2024/05/29 19:55

创建型模型

一、单例模式
解释:单例模式,就是说,在一个jvm进程下,关于某个类的对象,只会存在该类的唯一的一个对象,不会存在多个对象。(通常的说法也就是:一个运行中的程序,关于某个类只存有一个对象)
应用场景:
1. 全局配置
2. 全局线程池
3. 任务管理器(eg:win 任务窗口)

判断单例模式的方式:
资源共享

实现方式
● 饥汉模式
当类被加载的时候,就实例化出该类的一个对象
Code example

public class Singleton{    private static final Singleton = new Singleton();    private Singleton(){}    public static Singleton getInstance(){        return instance;    }}

特点:简单安全,程序无需用到该对象也会被创建,当一个JVM中存在大量这种方式被创建而不被使用的对象,会有资源浪费情况。

● 懒汉模式
当需要使用到该类的对象的时候,才会被实例化,并且该类的对象只会被初始化一次且只有一个该对象
Code example

public class Singleton{    private volatile static Singleton instance = null;    private Single(){}    public static Singleton getInstance(){        if(null == instance){            synchronized(Singleton.class){                if(null == instance){                     instance = new Singleton();                }            }        }        return instance;    }}

特点:double check,加锁防并发创建多个对象,当有很多单例对象用这种方式创建时,性能会稍受到影响。第一次需要被使用的时候才会创建对象,一般不会造成无需使用的对象占据内存资源的浪费。
● IODH (Initialization On Demand Holder)
Code example

class Singleton {      private Singleton() {      }      private static class HolderClass {              private final static Singleton instance = new Singleton();      }      public static Singleton getInstance() {          return HolderClass.instance;      }      public static void main(String args[]) {          Singleton s1, s2;           s1 = Singleton.getInstance();          s2 = Singleton.getInstance();          System.out.println(s1==s2);      }  }

特点:利用JVM类加载机制,只有真正需要使用到该单例对象,内部类的成员才会被初始化。简单高效安全。推荐使用IoDH方式进行单例对象的创建。

原创粉丝点击