ผลต่างระหว่างรุ่นของ "แบบแผนซิงเกิลตัน"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Octahedron80 (คุย | ส่วนร่วม)
Octahedron80 (คุย | ส่วนร่วม)
บรรทัด 21:
ซอร์สโค้ดคลาสซิงเกิลตันใน[[ภาษาจาวา]]
 
<source lang="java">
<font color="#0000c0"><b>public&nbsp;class&nbsp;</b></font><font color="#000000">Singleton&nbsp;</font><font color="#000000">{</font>
public class Singleton {
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>private&nbsp;static&nbsp;</b></font><font color="#000000">Singleton&nbsp;instance&nbsp;=&nbsp;</font><font color="#0000c0"><b>null</b></font><font color="#000000">;</font>
private static Singleton instance = null;
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>private&nbsp;</b></font><font color="#000000">Singleton</font><font color="#000000">()&nbsp;{}</font>
private Singleton() {}
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>public&nbsp;static&nbsp;</b></font><font color="#000000">Singleton&nbsp;getInstance</font><font color="#000000">()&nbsp;{</font>
public static Singleton getInstance() {
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>if&nbsp;</b></font><font color="#000000">(</font><font color="#000000">instance&nbsp;==&nbsp;</font><font color="#0000c0"><b>null</b></font><font color="#000000">)&nbsp;{</font>
if (instance == null) {
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">instance&nbsp;=&nbsp;</font><font color="#0000c0"><b>new&nbsp;</b></font><font color="#000000">Singleton</font><font color="#000000">()</font><font color="#000000">;</font>
instance = new Singleton();
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
}
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>return&nbsp;</b></font><font color="#000000">instance;</font>
return instance;
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
}
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>public&nbsp;</b></font><font color="#c00000"><b>void&nbsp;</b></font><font color="#000000">doWork</font><font color="#000000">()&nbsp;{</font>
public void doWork() {
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;do&nbsp;something</font>
// do something
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
}
<font color="#000000">}</font>
}
</source>
การเรียกใช้งาน
 
<source lang="java">
<font color="#000000">Singleton.getInstance</font><font color="#000000">()</font><font color="#000000">.doWork</font><font color="#000000">()</font><font color="#000000">;</font>
Singleton.getInstance().doWork();
</source>
 
คลาสซิงเกิลตันแบบปลอดภัียปลอดภัยในการทำงานแบบ multi-threading โดย Bill Pugh
 
<source lang="java">
public class ThreadSafeSingleton {
private ThreadSafeSingleton() {
}
 
private static class SingletonHolder {
คลาสซิงเกิลตันแบบปลอดภัียในการทำงานแบบ multi-threading โดย Bill Pugh
private static ThreadSafeSingleton instance = new ThreadSafeSingleton();
}
 
<font color="#0000c0"><b>public&nbsp;class&nbsp;</b></font><font color="#000000">static ThreadSafeSingleton&nbsp;</font><font color="#000000">getInstance() {</font>
return SingletonHolder.instance;
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>private&nbsp;</b></font><font color="#000000">ThreadSafeSingleton</font><font color="#000000">()&nbsp;{</font>
}
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
}
<font color="#ffffff"></font>
</source>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>private&nbsp;static&nbsp;class&nbsp;</b></font><font color="#000000">SingletonHolder&nbsp;</font><font color="#000000">{</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>private&nbsp;static&nbsp;</b></font><font color="#000000">ThreadSafeSingleton&nbsp;instance&nbsp;=&nbsp;</font><font color="#0000c0"><b>new&nbsp;</b></font><font color="#000000">ThreadSafeSingleton</font><font color="#000000">()</font><font color="#000000">;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
<font color="#ffffff"></font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>public&nbsp;static&nbsp;</b></font><font color="#000000">ThreadSafeSingleton&nbsp;getInstance</font><font color="#000000">()&nbsp;{</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000c0"><b>return&nbsp;</b></font><font color="#000000">SingletonHolder.instance;</font>
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font>
<font color="#000000">}</font>
 
== อ้างอิง ==