[Design Pattern]Singleton
Posted: Sun Jun 10, 2007 10:01 pm
เห้อ บอร์ดนี้ช่างเงียบดีเจงๆมีคนเล่นอยู่คนเดียว ช่างมันไว้เป็นที่ฝากเรื่องปวดหัวละกัน
Singleton คือ design pattern แบบนึง จบ
ขี้เกียจอธิบายยาว เพราะใช้เป็นอย่างเดียว 555 ไปดูรูปแบบมันจาก code ดีกว่า
จาก code ด้านบนจะเห็นว่า คลาส Bank สามารถสร้างออกมาได้ทางเดียวคือจาก method getInstance โดย method นี้จะมีการตรวจสอบว่าเคยมีการสร้าง instance ไว้หรือยัง ถ้าหากสร้างไว้แล้วก็เอา instance เดิมคืนให้เลย แต่ถ้ายังไม่สร้างก็จะสร้างให้ใหม่ การทำแบบนี้ทำให้จะเรียกกี่ครั้งในระบบก็จะมี Bank อยู่ Bank เดียว
ประโยชน์ของมันต้องลองเปรียบเทียบกับด้านล่างดู หากไม่ใช้ singleton
จาก code จะเห็นว่าหากไม่ใช้ singleton ยังสามารถใช้ static method ได้ แต่ถ้าหากคลาสนั้นมีการ inherit ขึ้นมา method ที่มีการทำงานของ Bank เดิมแล้วอยากจะซ่อนไว้ก็ยังสามารถเรียกใช้ได้อยู่
สำหรับ singleton ก็มีแค่นี้แหละ ว่าแต่ที่มหา'ลัย มีสอนพวก design pattern บ้างหรือยังเนี๊ยะ
Singleton คือ design pattern แบบนึง จบ
ขี้เกียจอธิบายยาว เพราะใช้เป็นอย่างเดียว 555 ไปดูรูปแบบมันจาก code ดีกว่า
- Code: Select all
class Bank {
private static Bank bank;
private Bank() {...};
public static Bank getInstance() {
if (bank != NULL)
return bank;
else {
bank = new Bank();
}
}
public void deposit() {...}
public void withdraw() {...}
public ...
}
จาก code ด้านบนจะเห็นว่า คลาส Bank สามารถสร้างออกมาได้ทางเดียวคือจาก method getInstance โดย method นี้จะมีการตรวจสอบว่าเคยมีการสร้าง instance ไว้หรือยัง ถ้าหากสร้างไว้แล้วก็เอา instance เดิมคืนให้เลย แต่ถ้ายังไม่สร้างก็จะสร้างให้ใหม่ การทำแบบนี้ทำให้จะเรียกกี่ครั้งในระบบก็จะมี Bank อยู่ Bank เดียว
ประโยชน์ของมันต้องลองเปรียบเทียบกับด้านล่างดู หากไม่ใช้ singleton
- Code: Select all
class Bank {
public static void deposit() {...}
public static void withdraw() {...}
public static ...
}
class ABank extend Bank {
...
}
class Main {
public static void main(String args[]) {
ABank a = new Abank();
ABank.deposit(); //? เอ๊ ยังสามารถเรียก method เดิมของ Bank ได้อยู่เลย
}
}
จาก code จะเห็นว่าหากไม่ใช้ singleton ยังสามารถใช้ static method ได้ แต่ถ้าหากคลาสนั้นมีการ inherit ขึ้นมา method ที่มีการทำงานของ Bank เดิมแล้วอยากจะซ่อนไว้ก็ยังสามารถเรียกใช้ได้อยู่
สำหรับ singleton ก็มีแค่นี้แหละ ว่าแต่ที่มหา'ลัย มีสอนพวก design pattern บ้างหรือยังเนี๊ยะ