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 }

  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/cb0327/p/5672070.html
Copyright © 2011-2022 走看看