[{"data":1,"prerenderedAt":245},["ShallowReactive",2],{"term-s\u002Fsingleton":3,"related-s\u002Fsingleton":234},{"id":4,"title":5,"acronym":6,"body":7,"category":216,"description":217,"difficulty":218,"extension":219,"letter":220,"meta":221,"navigation":97,"path":222,"related":223,"seo":228,"sitemap":229,"stem":232,"subcategory":6,"__hash__":233},"terms\u002Fterms\u002Fs\u002Fsingleton.md","Singleton",null,{"type":8,"value":9,"toc":210},"minimark",[10,15,19,23,26,30,199,203,206],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Singleton is a pattern that ensures only ONE instance of a class exists in your entire app. It's like the CEO — there's only one, everyone talks to the same person, and creating a second CEO would cause chaos. Database connections and config objects are often singletons.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"The Singleton pattern is a creational design pattern that restricts instantiation of a class to a single object and provides a global access point to it. Often criticized for introducing global state, making testing harder and creating hidden dependencies.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class Config {\n  private static instance: Config;\n  private constructor() {}\n\n  static getInstance(): Config {\n    if (!Config.instance) {\n      Config.instance = new Config();\n    }\n    return Config.instance;\n  }\n}\n","typescript","",[38,39,40,57,78,92,99,115,144,167,173,187,193],"code",{"__ignoreMap":36},[41,42,45,49,53],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"spNyl","class",[41,50,52],{"class":51},"sBMFI"," Config",[41,54,56],{"class":55},"sMK4o"," {\n",[41,58,60,63,66,70,73,75],{"class":43,"line":59},2,[41,61,62],{"class":47},"  private",[41,64,65],{"class":47}," static",[41,67,69],{"class":68},"swJcz"," instance",[41,71,72],{"class":55},":",[41,74,52],{"class":51},[41,76,77],{"class":55},";\n",[41,79,81,83,86,89],{"class":43,"line":80},3,[41,82,62],{"class":47},[41,84,85],{"class":47}," constructor",[41,87,88],{"class":55},"()",[41,90,91],{"class":55}," {}\n",[41,93,95],{"class":43,"line":94},4,[41,96,98],{"emptyLinePlaceholder":97},true,"\n",[41,100,102,105,108,111,113],{"class":43,"line":101},5,[41,103,104],{"class":47},"  static",[41,106,107],{"class":68}," getInstance",[41,109,110],{"class":55},"():",[41,112,52],{"class":51},[41,114,56],{"class":55},[41,116,118,122,125,128,132,135,138,141],{"class":43,"line":117},6,[41,119,121],{"class":120},"s7zQu","    if",[41,123,124],{"class":68}," (",[41,126,127],{"class":55},"!",[41,129,131],{"class":130},"sTEyZ","Config",[41,133,134],{"class":55},".",[41,136,137],{"class":130},"instance",[41,139,140],{"class":68},") ",[41,142,143],{"class":55},"{\n",[41,145,147,150,152,154,157,160,163,165],{"class":43,"line":146},7,[41,148,149],{"class":130},"      Config",[41,151,134],{"class":55},[41,153,137],{"class":130},[41,155,156],{"class":55}," =",[41,158,159],{"class":55}," new",[41,161,52],{"class":162},"s2Zo4",[41,164,88],{"class":68},[41,166,77],{"class":55},[41,168,170],{"class":43,"line":169},8,[41,171,172],{"class":55},"    }\n",[41,174,176,179,181,183,185],{"class":43,"line":175},9,[41,177,178],{"class":120},"    return",[41,180,52],{"class":130},[41,182,134],{"class":55},[41,184,137],{"class":130},[41,186,77],{"class":55},[41,188,190],{"class":43,"line":189},10,[41,191,192],{"class":55},"  }\n",[41,194,196],{"class":43,"line":195},11,[41,197,198],{"class":55},"}\n",[11,200,202],{"id":201},"when-youll-hear-this","When You'll Hear This",[16,204,205],{},"\"The logger is a Singleton — same instance everywhere.\" \u002F \"Singletons are controversial because they make unit testing harder.\"",[207,208,209],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":59,"depth":59,"links":211},[212,213,214,215],{"id":13,"depth":59,"text":14},{"id":21,"depth":59,"text":22},{"id":28,"depth":59,"text":29},{"id":201,"depth":59,"text":202},"architecture","Singleton is a pattern that ensures only ONE instance of a class exists in your entire app.","beginner","md","s",{},"\u002Fterms\u002Fs\u002Fsingleton",[224,225,226,227],"Design Pattern","Dependency Injection","Anti-Pattern","Global State",{"title":5,"description":217},{"changefreq":230,"priority":231},"weekly",0.7,"terms\u002Fs\u002Fsingleton","ybG5WAQGlViQXDFB16z7Q6JmwM4abF43yz6Hb5euE10",[235,238,242],{"title":226,"path":236,"acronym":6,"category":216,"difficulty":218,"description":237},"\u002Fterms\u002Fa\u002Fanti-pattern","Anti-Pattern is the opposite of a design pattern — it's a commonly used approach that looks like it solves a problem but actually makes things worse.",{"title":225,"path":239,"acronym":6,"category":216,"difficulty":240,"description":241},"\u002Fterms\u002Fd\u002Fdependency-injection","intermediate","Instead of your UserService creating its own DatabaseConnection (tight coupling), you pass the database in from outside: new UserService(db).",{"title":224,"path":243,"acronym":6,"category":216,"difficulty":240,"description":244},"\u002Fterms\u002Fd\u002Fdesign-pattern","Design patterns are like recipe cards for solving common coding problems.",1776518313444]