a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 151|回复: 1

[专业语言] Java单例模式饿汉式和懒汉式的实现

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
1、饿汉式   package singleton;: u) t1 F5 A8 j9 `+ U# h4 ]
  /**( E  t: K' S4 _- q  u( \6 Z
  * 饿汉式单例  w- v* E8 y' K/ _( v* S
  * @author 蒋明原3 Q3 l2 L8 u9 [- k( a% U. u! n
  *3 u3 l- K2 n% g( q& A0 e* ~" o
  */' P0 t9 \5 F: x  c# Z  j- R* k
  public class HungrySingleton {
) j' G4 v7 s" I0 P7 ~* M  /**jvm保证instance只被初始化一次*/
& X) b" u- }9 T+ o  private static HungrySingleton instance = new HungrySingleton();8 O9 n, d( {% H* t8 }. h
  /**阻止外部使用new实例化对象*/+ N% a( E, N; T" W* G( [) A
  private HungrySingleton(){5 S) v" l, k0 s; r+ z% ]
  }; a5 x# A5 \9 b# x* {6 ^
  /**/ X! c: T" ~7 T$ T6 J
  * 获取实例( }! w' w5 e/ S/ ]0 z
  * @return 独一的instance
6 E) l( x7 `2 b. c  */3 R  W+ }  F' @/ Z8 X
  public static HungrySingleton getInstance() {
: c2 G$ i% i/ @3 p3 T7 K  return instance;1 F& E6 n& v3 f. i3 d/ N7 o
  }
4 b# c! n& o9 [! c5 e1 w$ @) E5 j: Y  }2、懒汉式3 _. B) ]3 {8 Q3 f& X+ \$ c
  package singleton;
' s, I& i: Q) L1 c1 \. E  /**
; D- h' v! L4 I* C. ?2 L  * 懒汉式单例! a) q0 |! ?8 }; h
  * @author 蒋明原
' ?  l2 t# }* v) ~; Z% b5 J  *
- [$ y4 R/ V7 n3 ~  */% q0 ~# z: S5 K$ ^- X9 i
  public class LazySingleton {+ ~1 f& g4 h) R1 C" n# v% S7 j
  /**
% b% o# u7 R* J$ G  * 阻止外界使用new实例化对象8 Y, n7 ~) ^. i7 |
  */
8 _5 a6 q; ]# I- k" d4 C  private LazySingleton() {5 g. v- U- X% v6 `0 H3 J" s
  }; `+ o; |+ H3 ^% f; W8 d, |
  /**% |/ p3 M9 I  t& u8 b  L6 A# O
  * 只有在挪用getInstance()时此类才会被装载3 B) f! ~/ E) G2 d$ \/ f, f
  * 在SingletonKerriganF.java中说了然加载挨次7 f0 q6 l  d! C+ l* o
  */
1 Y! j, U" N  }2 |: ?7 w& Z  private static class SingletonHolder {
" k' }' l8 t5 q, V# g  /**
& e! U9 q! x) y4 J8 D  * 对象实例,jvm保证只初始化一次
+ g) C  w3 `- P; u6 x# Q4 T  */1 _7 C: l1 Y; E& A) |" ]* H! `  P* t
  static final LazySingleton INSTANCE = new LazySingleton();3 \5 a$ y3 Q, h( s
  }# W+ e% O3 M! V5 Z7 x  C
  /**
" \9 j2 K& d: C4 v4 x, r  * 获取实例" N2 f. \9 I2 Y$ F& z( ?# y
  * @return 返回独一实例
6 u& \1 {. S: A* Z. j  */
( ^) O* N3 B$ A0 F3 b: }2 [
6 I1 A6 @3 d! |2 o( C  
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:45 | 显示全部楼层

Java单例模式饿汉式和懒汉式的实现

public LazySingleton getInstance() {</p>  return SingletonHolder.INSTANCE;
) Y9 S6 N) `( n* y( K  }
" ], l& N% s* u6 O+ r0 I7 }9 a  R  }3、懒汉式单例内部类加载挨次  ~9 L, _4 A0 D; K4 }
  package singleton;) Y; N2 C/ P0 }' {
  /**9 b+ u- [9 r' P6 l1 J/ V
  * 实现单例访谒Kerrigan的第六次考试考试+ G: [# G, f: f; u+ @( N/ g; J8 r# Y
  * @author IcyFenix5 y8 f  p7 Y8 N# @& u
  * @see http://www.javaeye.com/topic/5750523 b9 \$ G7 U6 E1 ^/ X+ t
  */
9 T; c! U$ x! J( x  public class SingletonKerriganF {# r" p" Q2 k1 d$ Y! U9 j: f% m4 P
  private static String arg = null;, ^; L2 n7 j( X. M9 m. G
  private static class SingletonHolder {
# Q2 \' a. J8 N. K7 w  f  /**1 `2 C9 p5 ?1 r
  * 单例对象实例  B4 s: K# C9 x( i/ ?7 |# T6 D$ E5 S- s' S
  */
6 t1 @* e& Q# J+ l. f3 Z- z4 b8 U  static final SingletonKerriganF INSTANCE = new SingletonKerriganF();  ?8 W% s2 S$ j
  }% d/ }6 Q3 W. r1 L9 P, b1 ^
  public static SingletonKerriganF getInstance() {8 {5 B" R9 s, D
  return SingletonHolder.INSTANCE;; V" d1 p% a! F* m" x; g$ g
  }$ K; G& e3 o# {' I
  public SingletonKerriganF() {7 F1 v( ?0 p2 \" [  d3 k% ]- B
  System.out.println("Kerrigan get arg:" + getArg());1 C. B1 ?% {+ o" \' S% j  w* b; }
  System.out.println("Kerrigan created!");" T. k0 \" S3 y. Z
  }. S# N3 |9 R% [; o8 r- q
  public static String getArg() {( E% {; L7 q7 p$ h
  return arg;! v( {$ E- X/ O8 I! v* {, Q
  }3 R1 {+ ^% F6 M& o$ v9 x+ ?- x# [
  public static void setArg(String arg) {. Q7 F7 L; e, ~) v4 o8 k
  SingletonKerriganF.arg = arg;
! m& W9 {0 k7 p  Q) E* M. w  }
8 J% l: Y2 o/ z+ @8 E* E  public static void main(String[] args) {9 l' J; w9 T6 r+ ~9 c8 [# M
  System.out.println("SingletonKerriganF was loaded,but SingletonKerriganF$SingletonHolder don't");
' Z/ w- |6 W2 H0 l  SingletonKerriganF.setArg("this maybe some config files etc....");/ Z1 F, R9 v# Q; G8 }) u6 ^
  SingletonKerriganF.getInstance();+ U( ~! s* ~/ h
  }
# k6 {+ m- c* N. K& l# N/ L, r# |  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 18:32 , Processed in 0.181957 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表