Singleton pattern

29 Aug 2016,
Share: 

Singleton pattern เป็น Design pattern ที่ใช้จํากัดจํานวนของอ็อบเจกต์ที่ถูกสร้างในขณะที่โปรแกรมทํางาน จะมีประโยชน์ในกรณีที่ระบบงานต้องการบังคับให้มีแค่อ็อบเจกต์เดียวเพื่อไม่ให้เกิดการซํ้าซ้อนกันเช่น Class ที่ใช้ในการควบคุม Hardware 1 ตัว ในการควบคุม Hardware 1 ตัวถ้าสร้างอ็อบเจกต์เพื่อควบคุมขึ้นมาหลายตัวอาจจะทําให้เกิดปัญหาในการควบคุม Hardware ได้

การนํา Singleton pattern ไปใช้งาน

Singleton pattern จะถูกสร้างโดยการเขียน Class ให้ซ่อน Constructor ของ Class ทั้งหมด คือให้ Constructor ทั้งหมด เป็น private เพื่อไม่ให้ Class นี้ถูกสร้างได้จาก Class อื่นๆ หลังจากนั้นให้เราสร้าง Method ที่ทําหน้าที่สร้างอ็อบเจกต์ของ Class นี้ โดยภายใน Method นี้จะ Check ด้วยว่าถ้าอ็อบเจกต์ถูกสร้างขึ้นมาแล้วจะไม่สร้างอีกแต่จะ Return อ็อบเจกต์ที่ม่อยู่แล้วออกไปทันที ข้อควรระวังในการใช้ Singleton pattern คือการใช้งานกับ multi-threading อาจจะเกิดปัญหาได้ในกรณีที่ thread แต่ละ thread พยายามเรียก Method เพื่อสร้างอ็อบเจกต์ครั้งแรก ในเวลาเดียวกัน อาจจะทําให้เกิดอ็อปเจกต์ขึ้นมามากกว่า 1 ตัว ป้องกันโดยอนุญาตให้เพียงหนึ่ง thread เรียกเมธอดได้ในขณะใดขณะหนึ่ง

ตัวอย่างในภาษา C#

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

Suggestion blogs

แอบเปิดกล้องแอป facebook messenger

สวัสดีครับในบทความนี้ ผมจะบอกว่าแอป facebook messenger สามารถ เปิดกล้อง Video call ได้โดยที่เจ้าของไม่อนุญาติ มันอาจจะเป็น bug ของแอป facebook messenger หรือป่าวผมไม่แน่ใจนะครับ ซึ่งผมเจอมันโดยบังเอิญ มาลองดู Video กันว่ามันทําได้อย่างไร

ตัวหารร่วมมาก และการนำไปใช้

ตัวหารร่วมมาก (ห.ร.ม.) คือ ตัวหารร่วม (หรือตัวประกอบร่วม) ที่มีค่ามากที่สุด ที่นำไปหารจำนวนนับชุดใด(ตั้งแต่สองจำนวนขึ้นไป) ได้ลงตัว ต่อไปนี้เราจะเรียกว่าการหา ห.ร.ม. เช่น ห.ร.ม. ของ 8 และ 12 คือ 4 เพราะ 4 คือจำนวนที่มากที่สุดที่หารทั้ง 8 และ 12 ได้ลงตัว

ESP8266 คืออะไร?

ESP8266 คืออะไร?ESP8266 คือ โมดูล wifi ภายในมีเฟิร์มแวร์ทํางานในลักษณะ Serial-to-WiFi ที่ช่วยให้อุปกรณ์อื่นๆ เช่น MCU สามารถต่อเข้ากับ internet ได้โดยใช้ port serial(ขา Tx, ขา Rx) และใช้คําสั่ง AT ในการควบคุมการทํางาน ต่อมาผู้พัฒนาได้พัฒนาเฟิร์มแวร์ NodeMcu ให้เป็น platform และใช้ภาษา LUA ในการเขียนโปรแกรม ด้วยความที่เป็น platform ที่สะดวกต่อการใช้งาน ทางผู้พัฒนาจึงจับ NodeMcu(ESP8266) ใส่เป็นบอร์ดหนึ่งใน Arduino IDE ด้วยซะเลย และได้พัฒนาให้สามารถเขียนโปรแกรมด้วยภาษา C/C++ สำหรับใครที่ใช้งาน Arduino อยู่แล้วสามารถใช้งานบน Arduino IDE ได้อย่างไม่อยากครับ


Copyright © 2019 - 2026 thiti.dev |  v1.61.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ