ดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

Singleton Pattern

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

 

เปรียบเสมือนว่าห้อง คือ Application ของเรา และกระดานก็คือ Model นั่นเอง เพราะ Singleton คือ สิ่งของที่มีชิ้นเดียวในโลกถ้าไม่มีก็ทำให้การสร้างขึ้นมา 
แต่ถ้าหากมีแล้วก็ใช้ซ้ำ นั่นเอง

โครงสร้างโค้ดที่เป็นแบบ Singleton (JAVA) หน้าตาก็จะเป็นปะมาณนี้

จากโค้ดตัวอย่างด้านบน มีตัวแปรที่มีชื่อว่า instance โดยมี type เป็น Object ที่ชื่อว่า Singleton ซึ่งเป็นตัวแปรแบบ static และมีการเข้าถึงเป็นแบบ private จึงต้องทำการสร้าง method ที่ชื่อว่า getInstance() เพื่อให้ทำการเข้าถึงตัวแปรที่ชื่อว่า instance นั่นเอง

ซึ่งการทำงานของ method getInstance() คือเมื่อมีการเรียกใช้ก็จะเช็คว่าตัวแปร instance นั้นมีค่าเท่ากับ null รึเปล่า ซึ่งครั้งแรกยังไงมันก็ null อะเนาะ และถ้าหากใช่ก็จะทำการกำหนดค่าให้กับตัวแปรโดยจะทำการสร้าง Object ที่ชื่อว่า Singleton ขึ้นมา แต่ถ้าไม่ก็จะทำการ return ตัวแปร instance ออกไป และเนื่องจากว่าตัวแปร instance เป็นแบบ static หมายความว่าจะไม่โดนทำลายทิ้ง พอมีการเรียกใช้ method getInstance() อีกครั้ง ตัวแปร instance ก็จะไม่มีค่าเป็น null ทำให้ไม่ต้องทำการสร้าง Object ขึ้นมาใหม่

และเห็นว่ามีการกำหนด Constructor ของ Class เป็นแบบ private เพื่อป้องกันไม่ให้ทำการสร้าง Object จากข้างนอก ถ้าหากต้องการเข้าถึง Class ต้องทำการเรียกผ่าน method ที่ชื่อว่า getInstance() เท่านั้น โดยการเรียกใช้งานก็จะหน้าตาประมาณนี้

public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
}

การนำเอา Singleton Pattern เข้ามาใช้งานก็เหมือนจะเป็นสิ่งที่ถูกต้อง เพราะไม่จำเป็นต้องมาสร้าง Object ใหม่ทุกครั้งตอนเรียกใช้งาน เช่น พวก Manager หรือ Utility แต่ถ้าหากไม่เข้าใจมันอย่างลึกซึ้งก็อาจจะกลายเป็นสิ่งที่น่ากลัว เนื่องจาก Singleton ก็ถือว่าเป็นตัวแปร static ที่ล่องลอยอยู่ในระบบ ถ้าหากเอามาใช้ในการเก็บข้อมูลที่มีขาดใหญ่ memory ก็ถูกกินไปตามขนาดของข้อมูล ซึ่งถ้าหากไม่มีการจัดการที่ดีก็ทำให้เกิดผลเสียได้ 

อ้างอิง medium.com

 

ช่องทางการศึกษาเพิ่มเติมข่าวสารที่น่าสนใจเกี่ยวกับ : เทคโนโลยี่ใหม่ๆ

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
สอบถามครับ เชื่อมฐานข้อมูล Wordpress ไม่ได้ครับ
โดย chatee supasand ส 19 ต.ค. 2019 4:07 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
4
92
อ 20 ต.ค. 2019 1:38 pm โดย vmuser
วิธีการสร้าง logfile ในภาษา Python ด้วย logging
โดย jirawoot ศ 18 ต.ค. 2019 1:21 pm บอร์ด Python Knowledge
1
190
ส 19 ต.ค. 2019 4:25 am โดย mindphp
เปิดโพย รวมมิตรไอโฟนตกรุ่น เริ่ม 900.-
โดย promotion ศ 18 ต.ค. 2019 11:42 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
24
ศ 18 ต.ค. 2019 11:42 am โดย promotion
ทำยังไงถึงจะ upload file เข้าไปอยู่ในโฟร์เดอร์ได้ครับ
โดย jamepiyawat พฤ 17 ต.ค. 2019 6:27 pm บอร์ด Programming - PHP
1
63
พฤ 17 ต.ค. 2019 6:30 pm โดย tsukasaz
สร้างไฟล์ PDF ด้วยภาษา PHP
โดย kkk_k พฤ 17 ต.ค. 2019 1:08 am บอร์ด Programming - PHP
1
82
พฤ 17 ต.ค. 2019 1:23 am โดย mindphp
ถามเรื่องเช็คตัวเลขว่ามีเลขที่มากกว่า 10 เเต่น้อยกว่า 20 กี่ตัวยังไงครับ
โดย Golff Sinlapachai พ 16 ต.ค. 2019 6:19 pm บอร์ด Programming - PHP
1
57
พ 16 ต.ค. 2019 6:25 pm โดย mindphp
ฐานข้อมูลค่ะ
โดย sopida พ 16 ต.ค. 2019 3:37 pm บอร์ด Programming - PHP
1
49
พ 16 ต.ค. 2019 3:53 pm โดย thatsawan
replace หลายจุด และหลาย pattern พร้อมกันจบในการรันคำสั่งครั้งเดียว
โดย jataz2 พ 16 ต.ค. 2019 3:17 pm บอร์ด Programming - C/C++ & java & Python
0
46
พ 16 ต.ค. 2019 3:17 pm โดย jataz2
อัพเดพตัว Build Windows 10 แอพ Your Phone รับสายเรียกเข้า-โทรออกจาก สมาร์ทโฟนได้แล้ว
โดย chatee supasand อ 15 ต.ค. 2019 12:18 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
56
อ 15 ต.ค. 2019 12:18 pm โดย chatee supasand
ตัวอย่างการสร้าง Service odoo13 บน Ubuntu 16.04
โดย mindphp ส 12 ต.ค. 2019 1:35 am บอร์ด Linux - Web Server
0
99
ส 12 ต.ค. 2019 1:35 am โดย mindphp
MJupgrade Joomla 1.5.26 > 3.9 ขึ้น Error: Could not connect to MySQL server.
โดย เห็ด อินโมชั่น ศ 11 ต.ค. 2019 3:30 pm บอร์ด Joomla Development
3
85
ศ 11 ต.ค. 2019 5:14 pm โดย เห็ด อินโมชั่น
MJupgrade Joomla 1.5.26 > 3.9 ขึ้น Error: Could not connect to MySQL server.
โดย เห็ด อินโมชั่น ศ 11 ต.ค. 2019 4:59 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
7
2241
ส 12 ต.ค. 2019 3:35 am โดย mindphp
อยากทราบวิธีนับจำนวน id ที่ซ้ำกัน ครับ
โดย jamepiyawat ศ 11 ต.ค. 2019 5:06 pm บอร์ด SQL - Database
3
181
ศ 11 ต.ค. 2019 6:20 pm โดย jamepiyawat
การ Search ค้นหาข้อมูลของบอร์ด phpBB
โดย aninthana พฤ 10 ต.ค. 2019 6:46 pm บอร์ด Wordpress user Guide Knowledge
0
134
พฤ 10 ต.ค. 2019 6:46 pm โดย aninthana
ทำป้าย PopUp ด้วย Modal ใน Bootstrap เวอร์ชั่น 4
โดย jamepiyawat พฤ 10 ต.ค. 2019 5:20 pm บอร์ด Booststap Knowledge
0
141
พฤ 10 ต.ค. 2019 5:20 pm โดย jamepiyawat
ทำยังไงถึงจะไม่ให้แสดงเลข ID หน้า Alias ได้ครับ
โดย jamepiyawat พฤ 10 ต.ค. 2019 4:03 pm บอร์ด Joomla Development
1
61
พฤ 10 ต.ค. 2019 6:02 pm โดย tsukasaz
ทำไมผมถึงดึงข้อมูลชื่อหมวดหมู่ออกมาแสดงหน้าตั้งค่า module ไม่ได้ครับ
โดย jamepiyawat พฤ 10 ต.ค. 2019 3:47 pm บอร์ด Joomla Development
2
66
พฤ 10 ต.ค. 2019 6:36 pm โดย jamepiyawat
ตัวเลขด้านหน้าข้อความที่เราตั้ง Alias คืออะไรครับ
โดย jamepiyawat พฤ 10 ต.ค. 2019 11:36 am บอร์ด Joomla Development
5
145
พฤ 10 ต.ค. 2019 2:46 pm โดย mindphp
แก้ปัญหา Error Ignoring file '50unattended-upgrades.ucf-old' in directory บน Ubunto 16.04 ติดตั้ง apt-get
โดย mindphp พฤ 10 ต.ค. 2019 5:42 am บอร์ด Linux - Web Server
0
112
พฤ 10 ต.ค. 2019 5:42 am โดย mindphp
Q - สอบถามวิธี Upload file html ไปยัง web service โดยใช้คำสั่ง curl ใน PHP
โดย birdkritsna พ 09 ต.ค. 2019 3:42 pm บอร์ด Programming - PHP
6
166
พฤ 10 ต.ค. 2019 2:07 pm โดย birdkritsna