Singleton pattern เป็น Design pattern ที่ใช้จํากัดจํานวนของอ็อบเจกต์ที่ถูกสร้างในขณะที่โปรแกรมทํางาน จะมีประโยชน์ในกรณีที่ระบบงานต้องการบังคับให้มีแค่อ็อบเจกต์เดียวเพื่อไม่ให้เกิดการซํ้าซ้อนกันเช่น Class ที่ใช้ในการควบคุม Hardware 1 ตัว ในการควบคุม Hardware 1 ตัวถ้าสร้างอ็อบเจกต์เพื่อควบคุมขึ้นมาหลายตัวอาจจะทําให้เกิดปัญหาในการควบคุม Hardware ได้
Singleton pattern จะถูกสร้างโดยการเขียน Class ให้ซ่อน Constructor ของ Class ทั้งหมด คือให้ Constructor ทั้งหมด เป็น private เพื่อไม่ให้ Class นี้ถูกสร้างได้จาก Class อื่นๆ หลังจากนั้นให้เราสร้าง Method ที่ทําหน้าที่สร้างอ็อบเจกต์ของ Class นี้ โดยภายใน Method นี้จะ Check ด้วยว่าถ้าอ็อบเจกต์ถูกสร้างขึ้นมาแล้วจะไม่สร้างอีกแต่จะ Return อ็อบเจกต์ที่ม่อยู่แล้วออกไปทันที ข้อควรระวังในการใช้ Singleton pattern คือการใช้งานกับ multi-threading อาจจะเกิดปัญหาได้ในกรณีที่ thread แต่ละ thread พยายามเรียก Method เพื่อสร้างอ็อบเจกต์ครั้งแรก ในเวลาเดียวกัน อาจจะทําให้เกิดอ็อปเจกต์ขึ้นมามากกว่า 1 ตัว ป้องกันโดยอนุญาตให้เพียงหนึ่ง thread เรียกเมธอดได้ในขณะใดขณะหนึ่ง
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SingletonExample {
class Program {
static void Main(string[] args) {
singletonClass obj = singletonClass.getInstance();
Console.WriteLine(obj != null);
Console.ReadKey();
}
}
public class singletonClass{
//สร้างตัวแปรสําหรับเก็บ Object ของ class
private static singletonClass _instance = null;
//ให้ constructor เป็น private เพื่อทําให้ไม่สามารถสร้าง Object ได้
private singletonClass() { }
//Function สําหรับสร้าง Object และ return ออกไป
//ในกรณีที่มีแล้วให้ return ออกไปเลย
public static singletonClass getInstance() {
if (_instance == null) {
_instance = new singletonClass();
}
return _instance;
}
}
}
จากตัวอย่าง class จะมี Method และตัวแปร ที่เป็น static ไว้สําหรับเก็บและ get ค่าของอ็อบเจกต์ เวลาเรียกใช้งาน class ก็ไม่ต้องสร้างอ๊อบเจกต์ สามารถเรียกผ่าน Static Method ได้เลย Download source code
สวัสดีครับ ในบทความนี้ก็เป็น EP.9 แล้วนะครับ โดยเนื้อหาจะเป็นเรื่องเกี่ยวกับ Context ในภาษา Go ซึ่งเป็นเรื่องที่เราจะต้องได้เจอเมื่อเราพัฒนาโปรแกรมด้วยภาษา Go ครับสําหรับท่านใดที่ยังไม่ได้อ่าน EP.8 ท่านสามารถกลับไปอ่านก่อนได้นะครับที่นี่ Go EP.8 Go Channel Select Multiple Communication Operationsมาเริ่มเรียนรู้ไปด้วยกันตามหัวข้อด้านล่างเลยครับ
วิธีการสร้าง Directory ใน Ubuntu เราจะใช้ Command คือmkdir [OPTION]... [DIRECTORY]...[OPTION]... คือ Option สําหรับสร้าง Directory ดังนี้
การสร้าง Class และการใช้งาน Class ในภาษา C++ มาดูวิธีการเขียนเลยครับ ก่อนอื่นให้เราสร้าง header(*.h) ก่อนครับ ไฟล์นี้จะเป็นตัวที่ใช้ระบุว่า Class เราชื่ออะไรมี method อะไรบ้าง มี field อะไรบ้าง รูปแบบการเขียนคือ