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

    设计模式之单例模式

    什么是单例模式?

    单例模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

    如何实现?

    懒汉式单例:

    将构造函数设置为private,同时设置一个getInstance()用来获取实例。

    懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间

    Singleton.java

     1 package singleton01;
     2 
     3 public class Singleton {
     4     private static Singleton singleton;
     5     private Singleton(){
     6         
     7     }
     8     
     9     public static Singleton getInstance() {
    10         if (singleton == null) {
    11             singleton= new Singleton();
    12         }
    13         return  singleton;
    14     }
    15 }
    Singleton.java

    Main.java 测试类

     1 package singleton01;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         Singleton singleton=Singleton.getInstance();
     6         Singleton singleton2=Singleton.getInstance();
     7         System.out.println(singleton==singleton2);
     8                 
     9     }
    10 }
    Main


    但是以上并未考虑到线程安全的问题,线程不安全。需将其进行同步操作。

     同步情况代码如下:

     1 package per.zww.design;
     2 
     3 /**
     4  * 懒汉型单例模式
     5  * 
     6  * @author zhaoww
     7  *
     8  */
     9 public class Singleton {
    10     private static Singleton singleton=null;
    11     private Singleton(){
    12     }
    13     
    14     public static Singleton getinstance() {
    15         // TODO Auto-generated method stub
    16         if (singleton==null) {
    17             synchronized (Singleton.class) {
    18                 if (singleton == null) {
    19                     singleton=new Singleton();
    20                 }
    21             }
    22         }
    23         return singleton;
    24     }
    25 }
    Singleton

    饿汉式单例:

    饿汉式单例类 在类初始化时,已经自行实例。

    饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。

    Singleton1.java

     1 public class Singleton1 {
     2 
     3     private Singleton1() {}
     4    
     5     private static final Singleton1 single = new Singleton1();
     6     
     7     public static Singleton1 getInstance() {
     8         return single;
     9     }
    10 }
    Singleton1.java

    登记式单例:未使用

    初学《大话设计模式》

  • 相关阅读:
    仓储模式Repository
    jwt测试
    net core webapi jwt
    net core发布到iis遇到的困难
    新的目标
    L9-2.安装mysql数据库
    L9-1-安装Apache
    L8_2
    Linux 08
    Linux 07 故障恢复
  • 原文地址:https://www.cnblogs.com/zhaoww/p/5082401.html
Copyright © 2011-2022 走看看