GORAGOD.com

เทคนิคการหลีกเลี่ยงการใช้งาน Singleton Pattern

จริงๆแล้ว Singleton Pattern มันก็มีประโยชน์หากใช้ถูกต้องตามหลักการของมัน ซึ่งก็คือการประกันว่าจะมีคลาสนี้ให้ใช้งานเพียงอันเดียวเท่านั้นตลอดทั้งแอพพลิเคชั่น ผมยกตัวอย่างเพิ่มเติมอีกสักอันละกัน เช่นการสั่งซื้อสินค้า ปกติจะต้องมีขั้นตอนการเลือกซื้อ => ตรวจสอบการสั่งซื้อ => ชำระเงิน เรามักจะใช้วิธีการส่งข้อมูลจากฟอร์มแรก ไปยังฟอร์มสอง และสามตามลำดับ (หากอนาคตมีฟอร์มสร้างใหม่หรือมีการเปลี่ยนขั้นตอนก็ต้องมาแก้ไขการรับส่งค่าใหม่ในทุกฟอร์ม) แต่หากมีการใช้ Singleton เข้าช่วย เช่นทำการกรอกฟอร์มแรก แล้วส่งข้อมูลไปเก็บไว้ที่ Singleton และทำเช่นเดียวกันนี้กับฟอร์มอื่นๆด้วย (ฟอร์มจะรับส่งค่ากับ Singleton เท่านั้น ไม่มีการส่งไปมาระหว่างฟอร์ม) การเพิ่มฟอร์มหรือแก้ไขขั้นตอนก็จะทำเพียงแค่ฟอร์มที่เกี่ยวข้องกับ Singleton เท่านั้น

แต่จากข้อเสียของ Singleton ทำให้หลายๆคนอาจไม่ชอบใช้ (ไม่ว่าด้วยเหตุใดก็ตาม) เราก็มีวิธีเลี่ยงการใช้งาน Singleton ได้
กฏข้อที่หนึ่ง Singleton ต้องมีเพียง Instance เดียวเท่านั้น (Single Instance) ข้อนี้ไม่ยากครับ ให้เราสร้างคลาสและควบคุมการสร้างด้วยตัวเองให้ได้ (ห้ามไม่ให้มีใครสร้างซ้ำด้วยตัวเอง)
กฏข้อที่สอง Singleton ต้องสามารถเรียกใช้ได้จากทุกที่ (Global Access) ข้อนี้ง่ายมาก PHP มีตัวแปร Global ให้เรียกใช้อยู่แล้วเช่น $_ENV
$_ENV['cfg'] = new Cgf();

เพียงแค่นี้เราก็สามารถเรียกใช้คลาสด้วยตัวแปร $_ENV['cfg'] จากที่ใดก็ได้

จริงๆแล้วคำแนะนำจากผมคือ เราจะสามารถเลือกใช้ Singleton หรือไม่ก็ได้ ถ้าเราเลือกที่จะไม่ใช้ เราก็ต้องควบคุมมันด้วยตัวเอง (เหมาะกับโปรเจ็คขนาดเล็กหรือทำคนเดียว) แต่หากทำงานเป็นทีมหรือบนโปรเจ็คขนาดใหญ่ การใช้ Singleton ก็จะช่วยลดข้อผิดพลาดลงได้