zoukankan      html  css  js  c++  java
  • Singleton

    问题:编写一个Singleton类

     简单的方式

     1 package cn.changb.singleton;
     2 
     3 /**
     4  * 简单的方式:弊端是在并发执行时,14行处可能存在多个实例
     5  */
     6 public class SingletonDemo1 {
     7     private static SingletonDemo1 INSTANCE;
     8 
     9     private SingletonDemo1() {
    10     }
    11 
    12     public static SingletonDemo1 getInstance() {
    13         if (INSTANCE == null) {
    14             INSTANCE = new SingletonDemo1();
    15         }
    16         return INSTANCE;
    17     }
    18 }

     公共域方式

     1 package cn.changb.singleton;
     2 
     3 /**
     4  * 公共域方式:简单,不存在并发出现多实例的问题,但弊端是返回实例时增加一些额外的逻辑
     5  */
     6 public class SingletonDemo2 {
     7     public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
     8 
     9     private SingletonDemo2() {
    10     }
    11 }

     工厂化方式

     1 package cn.changb.singleton;
     2 
     3 /**
     4  * 工厂化方式:可以在实例化过程中(11行处)添加逻辑
     5  */
     6 public class SingletonDemo3 {
     7     private static final SingletonDemo3 INSTANCE = new SingletonDemo3();
     8 
     9     private SingletonDemo3() {
    10     }
    11 
    12     public static SingletonDemo3 getInstance() {
    13         return INSTANCE;
    14     }
    15 }

     枚举类方式

     1 package cn.changb.singleton;
     2 
     3 /**
     4  * 枚举类方式:最佳实践,推荐方式
     5  * 
     6  * 不存在多个实例问题、反序列化问题!
     7  */
     8 public enum SingletonDemo4 {
     9     INSTANCE;
    10 }

     SingletonTest

     1 package cn.changb.singleton;
     2 
     3 public class SingletonTest {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());
     8         System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());
     9 
    10         System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);
    11         System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);
    12 
    13         System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());
    14         System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());
    15 
    16         System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
    17         System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
    18     }
    19 
    20 }

  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/cb0327/p/5672070.html
Copyright © 2011-2022 走看看