সিঙ্গেলটোন
সিঙ্গেলটোন ডিজাইন প্যাটার্ন ক্রিয়েশনাল ডিজাইন প্যাটার্ন ক্যাটাগরির মধ্যে পরে। এই প্যাটার্নের মুল উদ্দেশ্য হল প্রতিটি ক্লাসের শুধু মাত্র একটিই ইন্সট্যান্স/অবজেক্ট থাকা।
ধরুন, Singleton নামে আমাদের একটা ফাইনাল ক্লাস আছে তাহলে সিঙ্গেলটোন প্যাটার্নে এই ক্লাসকে এমনভাবে ব্যবহার করতে হবে যেন নতুন কোন ইন্সট্যান্স/অবজেক্ট তৈরি না হয়ে একটিই থাকে আর ক্লাসটিকে ইনহেরিট ও করা না যায়, যা আমরা নিচের মত করে করতে পারিঃ
<?php
final class Singleton
{
private static $instance;
public static function getInstance()
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct()
{
}
private function __clone()
{
}
private function __wakeup()
{
}
public function sayHi()
{
echo 'Hi';
}
}
$singleton = Singleton::getInstance();
$singleton->sayHi();
এখানে ক্লাসটি বাইরে থেকে ইন্সট্যান্সিয়েট না করে getInstance() স্ট্যাটিক মেথডটি ডিক্লেয়ার করা হয়েছে যাতে ক্লাসের ইন্সট্যান্সটা রিটার্ন করে।
অর্থাৎ,
$singleton = new Singleton();
এর পরিবর্তে
$singleton = Singleton::getInstance();
ব্যবহার করা হয়েছে।
আর ক্লাসের ইন্সট্যান্স $instance নামে ভ্যারিয়েবল এ রাখা হয়েছে।
যেমনঃ
private static $instance;
public static function getInstance()
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
আবার ক্লাসের একাধিক ইন্সস্ট্যান্স তৈরিতে বাধা দিতে আমরা __clone()__wakeup() ম্যাজিক মেথডগুলি ব্যাবহার করেছি।
এই লিঙ্ক থেকে কোডটি পাবেন।
Copy link