锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍚嶇О 璇存槑 Singleton 鍙湁涓涓璞″疄渚嬬殑綾?/p>
Main 嫻嬭瘯鐢ㄧ殑綾?/p>
[褰㈡垚]
Singleton Pattern 涓轟粈涔堜細鍑虹幇?鍦ㄦ垜浠蔣浠跺紑鍙戝拰鏋舵瀯涓?緇忓父閬囧埌榪欐牱鐨勬儏褰?鎴戜滑闇瑕佷竴涓被鍙兘涓斾粎鑳戒駭鐢熶竴涓疄渚?.姣斿琛ㄧず涓鍙拌綆楁満鐨勭被,琛ㄧず緋葷粺璁懼畾鐨勭被鎴栬呮槸琛ㄧず紿楀彛鐨勭被,榪樻湁涓轟簡鑺傜害璧勬簮,鍙浜х敓涓涓疄渚?.
濡備綍鏋勯犺繖縐嶆儏褰?Singleton妯″紡緇欐垜涓涓柟妗?
[浠g爜紺轟緥]
紼嬪簭鍒楄〃
[UML鍥綸
[紺轟緥浠g爜鍜岀被鐨勮癄閲奭
2
3 public class Singleton {
4 private static Singleton singleton = new Singleton();
5
6 private Singleton() {
7 System.out.println("Create instance...");
8 }
9
10 public static Singleton getInstance() {
11 return singleton;
12 }
13 }
14
Singleton Class:
1.璇ョ被鍙兘浜х敓涓涓璞″疄渚?br />
2.鎶婅綾葷殑鐨剆ingleton灞炴ц瀹氫負static鍐嶄互Singleton;綾葷殑瀵硅薄瀹炰緥榪涜鍒濆鍖?榪欎釜鍒濆鍖栫殑榪囩▼浠呭姞杞絊ington綾葷殑鏃跺欒皟鐢ㄤ竴嬈?(Line4)
3.鎶奡ingleton 綾葷殑鏋勯犲嚱鏁伴檺瀹氫負private,鐩殑鏄負浜嗛槻姝粠闈濻ingleton綾?鍏朵粬綾?璋冪敤鏋勯犲嚱鏁版潵浜х敓瀹炰緥,濡傛灉閫氳繃new鏂瑰紡鏉ヤ駭鐢烻ingleton瀹炰緥,浼氬嚭鐜扮紪璇戦敊璇?榪欐牱鍋氭槸涓轟簡淇濋櫓宸辮.(Line6)
4.瑕佸緱鍒癝ingleton瀹炰緥鐨勫敮涓鏂規硶灝辨槸璋冪敤綾婚潤鎬佹柟娉昰etInstance().榪欎釜鍚嶅瓧鍙互闅忎究鍙?鍙鏂逛究鐞嗚В灝辮.(Line 10)
2
3 public class Main {
4
5 public static void main(String[] args) {
6 System.out.println("Start");
7 Singleton obj1 = Singleton.getInstance();
8 Singleton obj2 = Singleton.getInstance();
9 if(obj1 == obj2){
10 System.out.println("obj1鍜宱bj2鏄悓涓鍊嬪皪璞″渚?/span>");
11 }else{
12 System.out.println("obj1鍜宱bj2涓嶆槸鍚屼竴鍊嬪皪璞″渚?/span>");
13 }
14 System.out.println("End");
15 }
16 }
17
Main Class
1.璇ョ被鏄祴璇曠▼搴?
2.紼嬪簭閫氳繃getInstance()鏂瑰紡浜х敓涓や釜obj1鍜宱bj2瀹炰緥.(Line 7,Line 8)
3.閫氳繃ojb1= =ojb2琛ㄨ揪寮忔潵紜畾涓や釜瀵硅薄鏄惁鐩稿悓,鍒ゅ畾鏄惁浜х敓浜哠ingleton鐨勭浜屼釜紺轟緥.(Line9-12)
鎵ц緇撴灉鍚箟:
1. 鐨勭‘濡傛,obj1鍜宱bj2鏄疭ingleton綾葷殑鍚屼竴涓笖鍞竴鐨勫璞″疄渚?
2.褰撶▼搴忔墽琛屽悗,絎竴嬈¤皟鐢╣etInstance鐨勬椂鍊欎細鍒濆鍖朣ingleton綾?鍚屾椂涔熶細鍒濆鍖杝tatic瀛楁,涔熷悓鏃朵駭鐢熶駭鐢熶簡涓涓敮涓瀵硅薄瀹炰緥.
[鎷撳睍鎬濊僝
濡備笅鐨勫彟涓涓涓崟渚嬫ā寮忕殑紼嬪簭鏈変粈涔堥殣鎮?
2
3 public class Singleton2 {
4
5 private static Singleton2 singleton = null;
6
7 private Singleton2(){
8 System.out.println("宸茬敘鐢熷皪璞″渚?/span>");
9 }
10 public static Singleton2 getInstance(){
11 if(singleton == null){
12 singleton = new Singleton2();
13 }
14 return singleton;
15 }
16
17 }
18
[瑙g瓟]
褰撳綰跨▼鍚屾椂璋冪敤Singleton2.getInstance()鏂規硶鏃訛紝鍙兘浼氫駭鐢熷涓璞″疄渚嬶紝渚嬪
public class Main extends Thread{
public static void main(String[] args) {
System.out.println("Starts.");
new Main("A").start();
new Main("B").start();
new Main("C").start();
System.out.println("End.");
}
public void run(){
Singleton2 obj = Singleton2.getInstance();
System.out.println(getName()+": obj ="+obj);
}
public Main(String name){
super(name);
}
}
public class Singleton2 {
private static Singleton2 singleton2 = null;
private Singleton2(){
System.out.println("宸蹭駭鐢熷璞″疄渚?/span>");
solwDown();
}
public static Singleton2 getInstance(){
if(singleton2 == null){
singleton2 = new Singleton2();
}
return singleton2;
}
private void solwDown(){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
鎵ц緇撴灉錛?br />
Start.
End.
宸蹭駭鐢熷璞″疄渚?
宸蹭駭鐢熷璞″疄渚?
宸蹭駭鐢熷璞″疄渚?
B: obj = Singleton2#2a9348
C: obj = Singleton2#b91134
A: obj = Singleton2#e343l12
錛?鏇挎崲涓篅錛?br />
涔嬫墍浠ヤ細鐭ラ亾榪欑鎯呭喌鏄洜涓篿f(singleton = = null){ singleton = new Singleton2(); }鍒ゆ柇涓嶅涓ヨ皚鐨勫鑷淬?br />
鍒╃敤: singleton == null 鍒ゆ柇涓虹┖鍚庡幓鎵цnew Singleton2()涔嬪墠錛屽彲鑳戒細鏈夊叾浠栫嚎紼嬫潵鎶㈠厛鍒ゆ柇琛ㄨ揪寮弒ingleton == null錛屼粠鑰屽張鎵ц涓閬嶅垱寤哄疄渚嬬殑鎿嶄綔銆?br />
瑙e喅鍔炴硶錛?br />
緇檊etInstance()鏂規硶娣誨姞Synchronized淇グ絎︼紝鍗沖彲淇敼鎴愮嚎紼嬪畨鍏ㄤ弗璋ㄧ殑鍗曚緥妯″紡銆?br />
private static Singleton2 singleton = null;
private Singleton2() {
System.out.println("宸蹭駭鐢熷璞″疄渚?/span>");
solwDown();
}
public static synchronized Singleton2 getInstance() {
if (singleton == null) {
singleton = new Singleton2();
}
return singleton;
}
private void solwDown() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
]]>
璇濊"宸ユ鍠勫叾宸ラ渶鍒╁叾鍣?,鏈変簡濂界殑宸ュ叿,濂界殑琛ㄨ揪鏂瑰紡,鑳界粰鎴戜滑鐨勫伐浣滃彉寰楃畝鍗曡屼紭闆?
涓轟簡鏇村ソ鐨勮瑙h璁℃ā寮?鏂逛究鐞嗚В,闇瑕佽繍鐢ㄤ竴縐嶅緩妯¤璁¤璦----UML.
UML(UML:Unified Modeling Language),鍗崇粺涓寤烘ā璇█,鐢ㄦ潵瀵硅蔣浠跺瘑闆嗙郴緇熻繘琛屾弿榪般佹瀯閫犮佽鍖栧拰鏂囨。緙栧埗鐨勪竴縐嶈璦.榪欐槸姒傚康,涓嶅ソ鐞嗚В.
UML鐨勪綔鐢?鎵撲釜姣旀柟:涓孌墊弿鍐欒糠浜烘搗婊╅鏅殑鏂囧瓧鍜屼竴騫呮弿緇樻搗婊╅鏅殑娌圭敾,鍘葷湅榪欎袱浠朵笢瑗跨殑浜?鏈夌殑浜哄彲鑳借兘璇繪噦鏂囧瓧(鍙兘鏄壒瀹氱殑璇█),鏈夌殑涓嶈瀛?鎵浠ュ茍涓嶆槸鎵鏈夌殑浜鴻兘鐪嬫噦鏂囧瓧琛ㄨ揪鐨勫唴瀹?浣嗘槸鎵鏈夌殑浜洪兘鑳借鎳傛補鐢繪墍琛ㄧ幇鍑烘潵鐨勫惈涔?娌圭敾琛ㄨ揪鍐呭鐨勭洿鎺?褰㈣薄,涓板瘜鐗規у氨綾誨瀷UML鍦ㄦ弿鍙欒蔣浠剁粨鏋勮繃紼嬩腑鐨勪綔鐢?
鍦ㄨ蔣浠墮」鐩腑,涓鑸湁鍑犱釜瑙掕壊:鐢ㄦ埛(User),鏋舵瀯璁捐甯?orPM, SA),紼嬪簭鍛?PG)
鐢ㄦ埛:
涔熻涓嶆噦璁$畻鏈?涔熶笉鎳傜紪紼嬭璦,浣嗘槸鎳傝涓氫笟鍔?璇ヨ蔣浠剁殑鍔熻兘闇姹?
紼嬪簭鍛?br />
鎳傝綆楁妧鏈?鎳傜紪紼嬭璦.浣嗘槸涓嶅お浜嗚В琛屼笟閫昏緫.闇瑕佹妸瀹㈡埛鐨勪笟鍔″簲鐢ㄩ渶姹傝漿鍙樹負紼嬪簭浠g爜,
鏋舵瀯璁捐甯?br />
璧勬繁鐨勮涓氭灦鏋勮璁″笀搴旇鍏鋒湁涓瀹氱殑琛屼笟鐭ヨ瘑,鏃㈣兘鍚噦瀹㈡埛鐨勪笟鍔¢渶姹?鍙堣兘鐭ラ亾鎬庝箞鍛婅瘔紼嬪簭鍛樺幓鐢ㄤ唬鐮佸疄鐜?
鏋舵瀯璁捐甯堝湪鍓嶄袱鑰呬氦嫻佷腑璧峰埌鎵垮墠鍚悗鐨?涓棿浣?浣滅敤.UML灝辨槸閲囩敤鍥懼艦鍖栫殑褰㈠紡鏉ヨ〃杈炬灦鏋勫拰璁捐.鎴愪負浜嗗緩妯¤璁$殑閫氱敤鐨勮璁℃爣鍑?.
[UML鍩虹]