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

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();
}

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

   ตัวอย่างการใช้งาน Singleton

public class UserData {

    private String fistName;
    private String lastName;

    private static UserData instance;

    private UserData() {

    }

    public static UserData getInstance() {
        if (instance == null)
            instance = new UserData();
        return instance;
    }

    public String getFistName() {
        return fistName;
    }

    public void setFistName(String fistName) {
        this.fistName = fistName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

- Constructor จะเป็น private เนื่องจากไม่ต้องการให้ผู้ใช้งานสร้าง instance ได้
- มี static method ชื่อว่า instance เอาไว้สำหรับให้ผู้ใช้งาน เพื่อทำให้มั่นใจว่าจะมีเพียง instance เดียวเท่านั้น

    การนำเอา Singleton Pattern เข้ามาใช้งานก็เหมือนจะเป็นสิ่งที่ถูกต้อง เพราะ ซิงเกิลตันแพตเทิร์นถูกสร้างโดยเขียนคลาสให้ซ่อนคอนสทรัคเตอร์ทั้งหมดไว้จากคลาสอื่นๆ คือให้คอนสทรัคเตอร์เป็นไพรเวท จากนั้นสร้างเมธอดมีหน้าที่สร้างอ็อบเจกต์ของคลาสนี้ถ้ายังไม่ถูกสร้างและเก็บอ็อบเจกต์ตัวที่ถูกสร้างใหม่นี้ไว้ จากนั้นส่งคืนอ็อบเจกต์เพียงตัวเดียวนั้นให้ทุกครั้งที่มีการร้องขออ็อบเจกต์ของคลาส ไม่จำเป็นต้องมาสร้าง Object ใหม่ทุกครั้งตอนเรียกใช้งาน เช่น พวก Manager หรือ Utility แต่ถ้าหากไม่เข้าใจมันอย่างลึกซึ้งก็อาจจะกลายเป็นสิ่งที่น่ากลัว เนื่องจาก Singleton ก็ถือว่าเป็นตัวแปร Static ที่ล่องลอยอยู่ในระบบ ถ้าหากเอามาใช้ในการเก็บข้อมูลที่มีขาดใหญ่ Memory ก็ถูกกินไปตามขนาดของข้อมูล ซึ่งถ้าหากไม่มีการจัดการที่ดีก็ทำให้เกิดผลเสียได้ ข้อควรระวังสำหรับการใช้ซิงเกิลตันแพตเทิร์นในโปรแกรมที่ทำงานแบบ multi-threading คือหลายส่วนของโปรแกรมอาจจะพยายามเรียกเมธอดให้สร้างอ็อบเจกต์เป็นครั้งแรกในเวลาเดียวกัน อาจทำให้มีการสร้างอ็อบเจกต์ขึ้นมาเกินหนึ่งตัวได้ ในกรณีนี้ควรป้องกันโดยอนุญาตให้เพียงหนึ่งเทร็ดเรียกเมธอดได้ในขณะใดขณะหนึ่ง (mutually exclusive)

อ้างอิงข้อมูลและโค้ดตัวอย่างจาก 

 Singleton Pattern .[ออนไลน์].เข้าถึงได้จาก : https://www.goragod.com/knowledge/singleton_pattern.html .[16.3.2020]

Singleton Pattern คืออะไร?.[ออนไลน์].เข้าถึงได้จาก : https://medium.com/20scoops-cnx/singleton-pattern-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-b7b28182654f .[16.3.2020]

ซิงเกิลตันแพตเทิร์น .[ออนไลน์].เข้าถึงได้จาก : https://th.wikipedia.org/wiki/%E0%B8%8B%E0%B8%B4%E0%B8%87%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%A5%E0%B8%95%E0%B8%B1%E0%B8%99%E0%B9%81%E0%B8%9E%E0%B8%95%E0%B9%80%E0%B8%97%E0%B8%B4%E0%B8%A3%E0%B9%8C%E0%B8%99 .[16.3.2020]

ว่าด้วยเรื่องของ Singleton pattern ควรเข้าใจก่อนนำมาใช้งาน .[ออนไลน์].เข้าถึงได้จาก : http://www.somkiat.cc/singleton-pattern/ .[16.3.2020]

Singleton design pattern in Java .[ออนไลน์].เข้าถึงได้จาก : https://www.javatpoint.com/singleton-design-pattern-in-java .[16.3.2020]

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
การแก้ไขปัญหาภาษาไทยสระทับซ้อนกันใน โปรแกรม Adobe Illustrator cc 2019
โดย Bellamy พฤ 29 ต.ค. 2020 5:32 pm บอร์ด Graphic design
0
2
พฤ 29 ต.ค. 2020 5:32 pm โดย Bellamy
ขอวิธีแก้ Bug ปุ่ม Next ให้เป็นภาษาไทย , หลังจากที่ได้ทำการติดตั้งตัง ตัวรับรองภาษาไทยแล้ว
โดย makup พฤ 29 ต.ค. 2020 5:15 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
0
10
พฤ 29 ต.ค. 2020 5:15 pm โดย makup
เกิด Fatal error ในหน้าแรก , เกิดจากเข้าไปตรง ส่วนเสริม แล้วพอคลิกปุ่ม หน้าเว็บบอรด์
โดย makup พฤ 29 ต.ค. 2020 4:20 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
15
พฤ 29 ต.ค. 2020 4:33 pm โดย thatsawan
จะอัพเกรดJoomla 1.5 ไปเป็น 3.9
โดย somporn.so พฤ 29 ต.ค. 2020 3:56 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
10
พฤ 29 ต.ค. 2020 4:08 pm โดย mindphp
จำทำเว็บขายของ ใช้ Joomla Virtuemart ดีไหม
โดย Anonymous พฤ 29 ต.ค. 2020 3:10 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
15
พฤ 29 ต.ค. 2020 4:10 pm โดย mindphp
ขอวิธีการติดตั้ง phpBB ในตัวเครื่อง Ubuntu หน่อยครับ
โดย makup พฤ 29 ต.ค. 2020 1:37 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
4
20
พฤ 29 ต.ค. 2020 2:29 pm โดย mindphp
แจ้งเตือนชำระเงิน บน browser ด้วย Plugin System MZC Notify ใน MooZiiCart
โดย bolue พ 28 ต.ค. 2020 6:37 pm บอร์ด MindPHP News & Feedback
0
21
พ 28 ต.ค. 2020 6:37 pm โดย bolue
จัดการเว็บไซต์ที่มีหลายร้านค้าง่ายๆ ด้วย Plugin System MZC Multi Shop ใน MooZiiCart
โดย bolue พ 28 ต.ค. 2020 6:27 pm บอร์ด MindPHP News & Feedback
0
14
พ 28 ต.ค. 2020 6:27 pm โดย bolue
ลบส่วนส่วนเกินในรูปภาพ โดย Photoshop cc
โดย Bellamy พ 28 ต.ค. 2020 5:49 pm บอร์ด Graphic design
0
26
พ 28 ต.ค. 2020 5:49 pm โดย Bellamy
สอนการ บวก ลบ คูณ หาร ง่ายๆ ผ่านการใช้ Excel ออนไลน์
โดย Bellamy อ 27 ต.ค. 2020 7:38 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
25
อ 27 ต.ค. 2020 7:38 pm โดย Bellamy
การสไลด์โชว์สินค้าได้หลายรูปแบบ ด้วย Module MZC Slider ii ใน MooZiiCart
โดย bolue อ 27 ต.ค. 2020 5:58 pm บอร์ด MindPHP News & Feedback
0
29
อ 27 ต.ค. 2020 5:58 pm โดย bolue
การแก้ไขข้อความ หรือเพิ่มรายละเอียดข้อความ แบบตรวจสอบได้ ผ่านทาง word online
โดย Bellamy อ 27 ต.ค. 2020 5:28 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
27
อ 27 ต.ค. 2020 5:28 pm โดย Bellamy
ขั้นตอนทำงาน System Analyst and Design
โดย Bellamy จ 26 ต.ค. 2020 6:51 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
48
จ 26 ต.ค. 2020 6:51 pm โดย Bellamy
แนะนำแหล่งท่องเที่ยวและการเดินทางในกทม
โดย Bellamy จ 26 ต.ค. 2020 4:53 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
2
38
จ 26 ต.ค. 2020 6:50 pm โดย Bellamy
Content Marketing คือ - ในปัจจุบันสำคัญอย่างไร?
โดย ploypola จ 26 ต.ค. 2020 12:07 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
28
จ 26 ต.ค. 2020 12:07 pm โดย ploypola
วิธีการ Insert , edit ,delete โดยผ่านตัว Model Laravel Framework
โดย makup ส 24 ต.ค. 2020 3:44 pm บอร์ด PHP Knowledge
1
43
ส 24 ต.ค. 2020 3:59 pm โดย makup
ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้
โดย makup พฤ 22 ต.ค. 2020 8:05 pm บอร์ด Programming - PHP
19
206
พฤ 29 ต.ค. 2020 12:51 pm โดย makup
อยากทราบว่า ตรงที่แสดงข้อมูล URL จะให้แสดงเฉพาะ id แค่ตัวเลข ต้องทำอย่างไงครับ
โดย makup พฤ 22 ต.ค. 2020 8:05 pm บอร์ด Programming - PHP
3
56
พฤ 22 ต.ค. 2020 8:16 pm โดย mindphp
วิธีการ Upload file ภาพ ขึ้น Server
โดย makup พฤ 22 ต.ค. 2020 5:41 pm บอร์ด PHP Knowledge
1
64
พฤ 22 ต.ค. 2020 5:54 pm โดย makup
ปัญหา phpBB Error ในหน้า admin vsprintf(): Too few arguments
โดย mindphp พ 21 ต.ค. 2020 5:36 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
0
53
พ 21 ต.ค. 2020 5:36 pm โดย mindphp