zoukankan      html  css  js  c++  java
  • 设计模式----单例模式

    一、模式定义

      单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

    二、分类

      (1)懒汉式:延迟加载方式。

      (2)饿汉式 :加载时就new出对象,线程安全,没有延时加载的优势。

    三、代码实现

      1.饿汉式单例(立即加载,线程安全)

     1 public class SingletonDemo1 {
     2     private static SingletonDemo1 instance = new SingletonDemo1();
     3     
     4     private SingletonDemo1(){
     5     
     6     }
     7     
     8     public static SingletonDemo1 getInstance(){
     9         return instance;
    10     }
    11 }

      2.懒汉式单例(延迟加载,使用synchronized同步锁保证只能创建一个实例,但是会降低效率,下一个线程想要获取对象,就必须等待上一个线程释放锁之后,才可以继续运行。)

     1 public class SingletonDemo2 {
     2     private static SingletonDemo2 instance;
     3     private SingletonDemo2(){
     4     
     5     }
     6     
     7     public static synchronized SingletonDemo2 getInstance(){
     8         if(instance==null){
     9             instance = new SingletonDemo2();
    10         }
    11         return instance;
    12     }
    13 }

      3.双重检测锁式(将同步内容放入到if内部,由于编译器优化原因和JVM底层内部模型原因偶尔会出问题,不建议使用)

      4.静态内部类式(懒加载:一开始不会初始化静态内部类,只有调用getInstance()时才初始化,类加载过程中天然线程安全,调用效率高)

     1 public class SingletonDemo3 {
     2     private static class SingletonClassInstance{
     3         private static final SingletonDemo3 instance = new SingletonDemo3();
     4     }
     5     
     6     private SingletonDemo3(){
     7         
     8     }
     9     
    10     public static SingletonDemo3 getInstance(){
    11         return SingletonClassInstance.instance;
    12     }
    13 }

      5.枚举单例

     1 class Resource{
     2 }
     3  
     4 public enum SomeThing {
     5     INSTANCE;
     6     private Resource instance;
     7     SomeThing() {
     8         instance = new Resource();
     9     }
    10     public Resource getInstance() {
    11         return instance;
    12     }
    13 }
  • 相关阅读:
    [Postman]历史(8)
    [Postman]响应(7)
    [Postman]请求(6)
    [Postman]查找替换(5)
    ORA-02050故障诊断一例
    转 js实践篇:例外处理Try{}catch(e){}
    转 PHP
    HTML DOM getElementById() 方法
    地点选择
    9i 和 11 g 区别
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/9962002.html
Copyright © 2011-2022 走看看