סינגלטון (תבנית עיצוב)

ערך ללא מקורות
בערך זה אין מקורות ביבליוגרפיים כלל, לא ברור על מה מסתמך הכתוב וייתכן שמדובר במחקר מקורי.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה. (11 בפברואר 2021)
ערך ללא מקורות
בערך זה אין מקורות ביבליוגרפיים כלל, לא ברור על מה מסתמך הכתוב וייתכן שמדובר במחקר מקורי.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה. (11 בפברואר 2021)

תבנית סינגלטון (מאנגלית: Singleton, בעברית: יחידן לפי האקדמיה ללשון העברית) היא תבנית עיצוב (design pattern) בהנדסת תוכנה, אשר נועדה למקרים בהם מעוניינים להגביל את יצירת המופעים (Instances) של מחלקה (class) מסוימת למופע יחיד. תבנית זו שימושית כאשר נדרש רק מופע אחד על מנת לתאם פעולות במערכת. מתכנתים מסוימים מגדירים את התבנית הזו כתבנית anti-pattern, כלומר, תבנית שנראית מאוד פשוטה וברורה, אבל בפועל היא לא אופטימלית, או שימושית. הגדרה זו נובעת מכך שתבנית זו היא שכיחה מאוד בקרב מפתחים, ולעיתים רבות יוצרת הגבלות שלא לצורך, במצבים בהם אין צורך ממשי במופע יחיד.

מימוש

תרשים UML של מחלקה המממשת את תבנית סינגלטון

מימוש התבנית חייב לעמוד בשני עקרונות: מופע יחיד של המחלקה, וגישה גלובלית. נדרשת האפשרות לגשת לאיבר במחלקה סינגלטון מבלי ליצור אובייקט של המחלקה, וכן מנגנון אשר ישמור את ערכי האיברים של המופע שנוצר. התבנית מושגת באמצעות מחלקה הכוללת פונקציה, אשר בקריאה הראשונה יוצרת מופע חדש, ובקריאות הבאות, מחזירה מצביע לאותו מופע שיצרה קודם. כדי להבטיח שאכן יהיה מופע בודד של המחלקה ולא ניתן יהיה ליצור אותה בצורה אחרת, הגדרת הגישה לפונקציית הבנאי (Constructor) מוגדרת כ-private או protected.

ביישומים מרובי תהליכונים (multi-threaded applications) יש להיזהר במימוש התבנית. אם שני תהליכונים ניגשים לפונקציית הבנייה באותו הזמן, ייתכן מצב בו שניהם ייצרו מופע – מצב אותו אנו מנסים למנוע.

דוגמאות מימוש

Java

דרך בטוחה מבחינת תהליכונים (Threads) ב-Java הוצעה על ידי וילאם פו. היא נקראת גם "initialization on demand holder idiom" וממומשת בגישה של "אתחול עצל" (Lazy initialization). בגישה זו, יצירת המופע נדחית עד לרגע האחרון.

public class Singleton { 
  // Private constructor suppresses generation of a (public) default constructor
  private Singleton() {}

  /**
   * SingletonHolder is loaded on the first execution of Singleton.getInstance() 
   * or the first access to SingletonHolder.INSTANCE, not before.
   */
  private static class SingletonHolder { 
    private final static Singleton INSTANCE = new Singleton();
  }
  
  public static Singleton getInstance() {
    return SingletonHolder.INSTANCE;
  }
}

דרך המימוש המסורתית האלגנטית והפשוטה מתחשבת בריבוי תהליכים, אך לא מממשת אתחול עצל:

public class Singleton {
  private final static Singleton INSTANCE = new Singleton();
 
  // Private constructor suppresses generation of a (public) default constructor
  private Singleton() {}
 
  public static Singleton getInstance() {
    return INSTANCE;
  }
}

#C

/// <summary>
/// Thread-safe singleton example without using locks
/// </summary>
public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
 
    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }
 
    Singleton()
    {
    }
 
    /// <summary>
    /// The public Instance property to use
    /// </summary>
    public static Singleton Instance
    {
        get { return instance; }
    }
}

++C

class Singleton
{
    private:
        /* Here will be the instance stored. */
        static Singleton* instance;

        /* Private constructor to prevent instancing. */
        Singleton();

    public:
        /* Static access method. */
        static Singleton* getInstance();
};

/* Null, because instance will be initialized on demand. */
Singleton* Singleton::instance = 0;

Singleton* Singleton::getInstance()
{
    if (instance == 0)
    {
        instance = new Singleton();
    }

    return instance;
}

Singleton::Singleton()
{}

PHP 5

תבנית סינגלטון ב-PHP, גרסה 5:

<?php
class Singleton {
  // object instance
  private static $instance;
  
  private function __construct() {}
  
  private function __clone() {}
  
  public static function getInstance() {
    if (self::$instance === null) {
      self::$instance = new self;
    }
    return self::$instance;
  }

  public function doAction() {
    ...
  }
}

//usage
Singleton::getInstance()->doAction();

?>

Objective-C

דרך פשוטה לממש סינגלטון ב-Objective-C:

@interface MySingleton : NSObject
{
}

+ (MySingleton *)sharedSingleton;
@end

@implementation MySingleton

+ (MySingleton *)sharedSingleton
{
  static MySingleton *sharedSingleton;
  
  @synchronized(self)
  {
    if (!sharedSingleton)
      sharedSingleton = [[MySingleton alloc] init];
    
    return sharedSingleton;
  }
}

@end

אם אין חובה להשתמש בתהליכונים, התיאום (סינכרון) יכול להישאר מחוץ לקוד, ואז הפונקציה +sharedSingleton תיראה כך:

+ (MySingleton *)sharedSingleton
{
  static MySingleton *sharedSingleton;

  if (!sharedSingleton)
    sharedSingleton = [[MySingleton alloc] init];

  return sharedSingleton;
}

קישורים חיצוניים

ויקישיתוף מדיה וקבצים בנושא סינגלטון בוויקישיתוף
  • דב זילברמן, Design Patterns, הסדרה "תבניות". פרק 3: הסינגלטון.

Read other articles:

Asep NataLahir24 Juni 1964 (umur 59)Sumedang, Jawa Barat, IndonesiaKebangsaanIndonesiaAlmamaterUniversitas Sumatera UtaraInstitut Seni Budaya Indonesia BandungPekerjaanEtnomusikolog Asep Nata (lahir 24 Juni 1964) merupakan seorang etnomusikolog berkebangsaan Indonesia. Ia merupakan pencipta dari Karinding Towél (KARTO) dan Pelok Song. Riwayat Hidup Pada tahun 2001 di Wisma Seni Taman Budaya Jawa Tengah di Solo menjadi titik awal baginya dalam menemukan formulasi instrumen Lamellaphone ...

 

Часть серии статей о Холокосте Идеология и политика Расовая гигиена · Расовый антисемитизм · Нацистская расовая политика · Нюрнбергские расовые законы Шоа Лагеря смерти Белжец · Дахау · Майданек · Малый Тростенец · Маутхаузен ·&...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada September 2016. Artikel ini perlu dikembangkan agar dapat memenuhi kriteria sebagai entri Wikipedia.Bantulah untuk mengembangkan artikel ini. Jika tidak dikembangkan, artikel ini akan dihapus. Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isiny...

Ini adalah daftar klub sepak bola di Indonesia. Saat ini Badan Pengurus sepakbola di Indonesia adalah Persatuan Sepak Bola Seluruh Indonesia (PSSI), yang membidangi tim nasional dan liga-liganya, dengan yang tertinggi adalah Liga 1. Klub Liga 1 Artikel utama: Liga 1 (Indonesia) 2023–2024 Berikut adalah tim-tim yang bermain di Liga 1 2023-2024: Logo Klub Kepanjangan Daerah Peta Stadion Arema FC Arema Football Club Kabupaten Malang Gajayana Bali United FC Bali United Football Club Kabupaten G...

 

Chinese taikonaut (born 1986) In this Chinese name, the family name is Gui. Gui Haichao桂海潮BornNovember 1986 (age 37)Yaoguan Town, Shidian County, Baoshan, Yunnan, China[1]StatusActiveNationality ChineseAlma materBeihang University (B.E., & PhD)OccupationAssociate ProfessorSpace careerCMSA payload specialist astronautPrevious occupationPostdoctoral researcherTime in space153 days, 22 hours and 41 minutesSelectionChinese Group 3MissionsShenzhou 16 Chinese nameS...

 

Italian writer and statesman (1789–1853) The Honourable CountCesare BalboPrime Minister of SardiniaIn office18 March 1848 – 27 July 1848MonarchCharles AlbertPreceded byOffice createdSucceeded byGabrio Casati Personal detailsBorn(1789-11-21)21 November 1789Turin, Kingdom of SardiniaDied3 June 1853(1853-06-03) (aged 63)Turin, Kingdom of SardiniaNationalitySardinianPolitical partyNeo-Ghibelline[1]Parent(s)Prospero Balbo and Enrichetta Taparelli d'AzeglioOccupationWriter...

NishithaInformationReligionJainism Part of a series onJainism Jains History Timeline Index Philosophy Anekantavada Cosmology Ahimsa Karma Dharma Mokṣa Kevala Jnana Dravya Tattva Brahmacarya Aparigraha Gunasthana Saṃsāra EthicsEthics of Jainism Mahavratas (major vows) Ahiṃsā (non-violence) Satya (truth) Asteya (non-stealing) Brahmacarya (chastity) Aparigraha (non-possession) Anuvratas (further vows) Sāmāyika Sallekhana Jain prayers Bhaktamara Stotra Micchami Dukkadam Ṇamōkāra ma...

 

Шалфей обыкновенный Научная классификация Домен:ЭукариотыЦарство:РастенияКлада:Цветковые растенияКлада:ЭвдикотыКлада:СуперастеридыКлада:АстеридыКлада:ЛамиидыПорядок:ЯсноткоцветныеСемейство:ЯснотковыеРод:ШалфейВид:Шалфей обыкновенный Международное научное наз...

 

Bilateral relationsChad–United States relations Chad United States Chad–United States relations are the international relations between Chad and the United States. According to the 2012 U.S. Global Leadership Report, 81% of Chadians approve of U.S. leadership, with 18% disapproving and 1% uncertain, the fourth-highest rating for any surveyed country in Africa.[1] Diplomatic missions Embassy of Chad in Washington D.C. The American embassy in N'Djamena, established at Chadian indepe...

Pour les articles homonymes, voir Sørensen. Søren SørensenBiographieNaissance 9 janvier 1868Havrebjerg (en)Décès 12 février 1939 (à 71 ans)CopenhagueNom dans la langue maternelle Søren Peter Lauritz SørensenNationalité danoiseFormation Université de CopenhagueActivité ChimisteEnfant Arthur Arnholtz (d)Autres informationsA travaillé pour CarlsbergUniversité technique du DanemarkMembre de Académie américaine des sciences (1938)Académie LéopoldineAcadémie royale danoise ...

 

جائحة فيروس كورونا في المكسيك 2020 خريطة توضح انتشار الفيروس في المكسيك (في 19 مارس)   لا يوجد حالات مُثبتة   الحالات المُثبتة من 1-10   الحالات المُثبتة من 11-24   الحالات المُثبتة من 25-50 المرض كورونا 19 السلالة SARS-CoV-2 أول حالة مدينة مكسيكو ولوس موتشيس[1] تاري�...

 

Pidgin trade language from the Pacific Northwest Chinook Jargonchinuk wawa, wawa, chinook lelang, lelang, chinookNative toCanada, United StatesRegionPacific Northwest (Interior and Coast): Alaska, The Yukon, British Columbia, Washington State, Oregon, Idaho, Montana, Northern CaliforniaNative speakers1 (2013)[1]Language familyMainly Wakashan (Nootka Jargon), Chinookan, and Indo-European (Germanic and Italic)Writing systemDe facto Latin,historically Duployan;currently standar...

United Parcel Service, Inc. Тип Публичная компания Листинг на бирже NYSE: UPS Основание 1907 Основатели Джеймс Кейси[d] Расположение  США: Атланта (Джорджия) Ключевые фигуры Уильям Джонсон (председатель совета директоров)Кэрол Томе (CEO) Отрасль Транспортные услуги Продукция экспресс-дос�...

 

Comune in Trentino-Alto Adige/Südtirol, ItalyCavizzanaComuneComune di CavizzanaLocation of Cavizzana CavizzanaLocation of Cavizzana in ItalyShow map of ItalyCavizzanaCavizzana (Trentino-Alto Adige/Südtirol)Show map of Trentino-Alto Adige/SüdtirolCoordinates: 46°22′N 10°57′E / 46.367°N 10.950°E / 46.367; 10.950CountryItalyRegionTrentino-Alto Adige/SüdtirolProvinceTrentino (TN)Area[1] • Total3.3 km2 (1.3 sq mi)Population...

 

Disambiguazione – Se stai cercando l'omonimo cestista, vedi Mike Myers (cestista). Mike Myers nel 2017 Mike Myers, vero nome Michael John Myers (Scarborough, 25 maggio 1963), è un attore, comico, sceneggiatore e produttore cinematografico canadese con cittadinanza britannica. I suoi genitori nacquero a Liverpool e pertanto egli dispone della doppia cittadinanza britannico-canadese.[1] Le origini etniche della sua famiglia sono da ricercare anche in Scozia e in Irlanda.[2] ...

Сельское поселение России (МО 2-го уровня)Новотитаровское сельское поселение Флаг[d] Герб 45°14′09″ с. ш. 38°58′16″ в. д.HGЯO Страна  Россия Субъект РФ Краснодарский край Район Динской Включает 4 населённых пункта Адм. центр Новотитаровская Глава сельского пос�...

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

 

Muséum des sciences naturellesEntrée du musée.Informations généralesType Histoire naturelleOuverture 1846Dirigeant Michel Van CampVisiteurs par an 398 241 (2023)Site web www.naturalsciences.be/frCollectionsCollections Les iguanodons de BernissartLocalisationPays BelgiqueRégion Région de Bruxelles-CapitaleCommune BruxellesCommune BruxellesAdresse Rue Vautier 29Coordonnées 50° 50′ 12″ N, 4° 22′ 36″ Emodifier - modifier le code - modifier Wiki...

Cet article est une ébauche concernant l’Espagne et le Concours Eurovision de la chanson. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Espagneau Concours Eurovision 1965 Conchita Bautista représentant l'Espagne avec la chanson ¡Qué bueno, qué bueno! lors de l'Eurovision 1965 à Naples. Données clés Pays  Espagne Chanson ¡Qué bueno, qué bueno! Interprète Conchita Bautista Compositeur Antonio ...

 

American slave narrative author James Lindsay SmithBorn1816 (1816)Northern Neck, Virginia, USDied1883(1883-00-00) (aged 66–67)Norwich, Connecticut, USOccupationAuthor, minister, shoemakerLanguageEnglishSubjectAutobiography, slave narrativeNotable worksAutobiography of James L. Smith (1881) James Lindsay Smith (ca. 1816 – ca. 1883) was an American slave narrative author, minister, and shoemaker.[1][2] His memoir Autobiography of James L. Smith (1881) was one of on...