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

    登记式单例:未使用

    初学《大话设计模式》

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/zhaoww/p/5082401.html
Copyright © 2011-2022 走看看