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

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

 

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Google เปิดตัว CallJoy ผู้ช่วย AI สำหรับธุรกิจขนาดกลางและขนาดเล็ก
โดย jamepiyawat อ 20 ส.ค. 2019 6:26 pm บอร์ด Share Knowledge
0
1
อ 20 ส.ค. 2019 6:26 pm โดย jamepiyawat
รายละเอียดการขอหนังสือรับรองผลงานจากลูกค้า
โดย EyePornnipa อ 20 ส.ค. 2019 6:11 pm บอร์ด M089 - นางสาวพรนิภา ราชธานี
0
9
อ 20 ส.ค. 2019 6:11 pm โดย EyePornnipa
สอบถามการหมุนไฟล์ PDF ถาวรหน่อยค่ะ
โดย EyePornnipa อ 20 ส.ค. 2019 5:38 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
3
14
อ 20 ส.ค. 2019 5:59 pm โดย chatee supasand
Microsoft จอนำ Notepad ขึ้น store อัพเดตไม่ต้องร Windows อีกต่อไป
โดย chatee supasand อ 20 ส.ค. 2019 5:30 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
2
อ 20 ส.ค. 2019 5:30 pm โดย chatee supasand
วิธีการปรับเปลี่ยนค่าเมื่อมีการ Quote โพสต์ ใน phpbb
โดย Ittichai_chupol อ 20 ส.ค. 2019 5:21 pm บอร์ด PHP Knowledge
0
1
อ 20 ส.ค. 2019 5:21 pm โดย Ittichai_chupol
วิธีการปรับเปลี่ยนค่า โฑสต์ เมื่อมีการ Quote ใน phpbb
โดย Ittichai_chupol อ 20 ส.ค. 2019 5:17 pm บอร์ด PHP Knowledge
0
0
อ 20 ส.ค. 2019 5:17 pm โดย Ittichai_chupol
งานประจำวันที่ 20 กรกฎาคม 2562
โดย jamepiyawat อ 20 ส.ค. 2019 10:09 am บอร์ด M084 - นายปิยวัช เชาว์วิมล
1
7
อ 20 ส.ค. 2019 10:19 am โดย jamepiyawat
งานประจำวันที่ 20 สิงหาคม 2562
โดย jirawoot อ 20 ส.ค. 2019 10:05 am บอร์ด M090 - นายจิระวุฒิ อัครลิขิตกุล
0
5
อ 20 ส.ค. 2019 10:05 am โดย jirawoot
งานประจำวันที่ 20 สิงหาคม 2562
โดย chatee supasand อ 20 ส.ค. 2019 9:58 am บอร์ด MT33 - นายชาตรี สุภาแสน
1
4
อ 20 ส.ค. 2019 7:09 pm โดย chatee supasand
งานประจำวันที่ 20 สิงหาคม 2562
โดย EyePornnipa อ 20 ส.ค. 2019 9:57 am บอร์ด M089 - นางสาวพรนิภา ราชธานี
1
10
อ 20 ส.ค. 2019 7:29 pm โดย EyePornnipa
ชีวิตนักเรียนออสเตรเลีย!!!
โดย aittit จ 19 ส.ค. 2019 9:07 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
8
จ 19 ส.ค. 2019 9:07 pm โดย aittit
งานประจำวันที่ 19 สิงหาคม 2562
โดย chatee supasand จ 19 ส.ค. 2019 10:03 am บอร์ด MT33 - นายชาตรี สุภาแสน
2
10
จ 19 ส.ค. 2019 7:51 pm โดย chatee supasand
google เปลี่ยนดีไซน์หน้าค้นหาใหม่ในสมาร์ทโฟนและแสดงไอคอนของเว็บไซต์ได้
โดย jamepiyawat จ 19 ส.ค. 2019 6:33 pm บอร์ด Share Knowledge
0
25
จ 19 ส.ค. 2019 6:33 pm โดย jamepiyawat
Windows 10 เตรียมอัพฟีเจอร์เช็คความร้อนของ GPU โดยไม่ต้องง้อโปรแกรมเสริมได้แล้วใน Build 18963
โดย chatee supasand จ 19 ส.ค. 2019 6:23 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
18
จ 19 ส.ค. 2019 6:23 pm โดย chatee supasand
อยากทราบวิธีการคำนวนจำนวนบรรทัด ใน google sheet
โดย Ittichai_chupol จ 19 ส.ค. 2019 4:19 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
16
จ 19 ส.ค. 2019 4:19 pm โดย Ittichai_chupol
การเสนอราคาสมาคมสโมสรนักลงทุน
โดย EyePornnipa จ 19 ส.ค. 2019 2:59 pm บอร์ด M089 - นางสาวพรนิภา ราชธานี
1
19
อ 20 ส.ค. 2019 11:50 am โดย EyePornnipa
สอบถาม wkhtmltopdf ตอนแปลงไฟล์ pdf แล้ว graph ใน javascript ไม่มาด้วย มีวิธีแก้ไขไหมครับ
โดย jirawoot จ 19 ส.ค. 2019 2:53 pm บอร์ด Programming - C/C++ & java & Python
0
16
จ 19 ส.ค. 2019 2:53 pm โดย jirawoot
สอบถาม วิธีการนับเวลาในไฟล์วีดีโอครับ
โดย jirawoot จ 19 ส.ค. 2019 11:34 am บอร์ด Programming - C/C++ & java & Python
1
25
จ 19 ส.ค. 2019 5:07 pm โดย jirawoot
งานประจำวันที่ 19 สิงหาคม 2562
โดย EyePornnipa จ 19 ส.ค. 2019 10:15 am บอร์ด M089 - นางสาวพรนิภา ราชธานี
3
22
จ 19 ส.ค. 2019 7:33 pm โดย EyePornnipa
งานประจำวันที่ 19 กรกฎาคม 2562
โดย jamepiyawat จ 19 ส.ค. 2019 10:09 am บอร์ด M084 - นายปิยวัช เชาว์วิมล
1
5
จ 19 ส.ค. 2019 7:56 pm โดย jamepiyawat