[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"term-o\u002Fopen-closed":3,"related-o\u002Fopen-closed":244},{"id":4,"title":5,"acronym":6,"body":7,"category":225,"description":226,"difficulty":227,"extension":228,"letter":229,"meta":230,"navigation":231,"path":232,"related":233,"seo":238,"sitemap":239,"stem":242,"subcategory":6,"__hash__":243},"terms\u002Fterms\u002Fo\u002Fopen-closed.md","Open-Closed",null,{"type":8,"value":9,"toc":219},"minimark",[10,15,19,23,26,30,208,212,215],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Open-Closed means your code should be open for adding new features but closed for editing old working code. Like a power strip — you can plug in new devices without rewiring the wall socket. Add new behavior by extending, not by hacking into existing code.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"The Open-Closed Principle states that software entities should be open for extension but closed for modification. New functionality is added by creating new classes or methods rather than modifying existing ones, typically achieved through abstractions, interfaces, and inheritance.",[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","\u002F\u002F Closed for modification, open for extension\ninterface DiscountStrategy {\n  calculate(price: number): number;\n}\nclass SummerDiscount implements DiscountStrategy {\n  calculate(price: number) { return price * 0.8; }\n}\nclass BlackFridayDiscount implements DiscountStrategy {\n  calculate(price: number) { return price * 0.5; }\n}\n","typescript","",[38,39,40,49,64,92,98,114,154,159,173,203],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Closed for modification, open for extension\n",[41,50,52,56,60],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","interface",[41,57,59],{"class":58},"sBMFI"," DiscountStrategy",[41,61,63],{"class":62},"sMK4o"," {\n",[41,65,67,71,74,78,81,84,87,89],{"class":43,"line":66},3,[41,68,70],{"class":69},"swJcz","  calculate",[41,72,73],{"class":62},"(",[41,75,77],{"class":76},"sHdIc","price",[41,79,80],{"class":62},":",[41,82,83],{"class":58}," number",[41,85,86],{"class":62},"):",[41,88,83],{"class":58},[41,90,91],{"class":62},";\n",[41,93,95],{"class":43,"line":94},4,[41,96,97],{"class":62},"}\n",[41,99,101,104,107,110,112],{"class":43,"line":100},5,[41,102,103],{"class":54},"class",[41,105,106],{"class":58}," SummerDiscount",[41,108,109],{"class":54}," implements",[41,111,59],{"class":58},[41,113,63],{"class":62},[41,115,117,119,121,123,125,127,130,133,137,141,144,148,151],{"class":43,"line":116},6,[41,118,70],{"class":69},[41,120,73],{"class":62},[41,122,77],{"class":76},[41,124,80],{"class":62},[41,126,83],{"class":58},[41,128,129],{"class":62},")",[41,131,132],{"class":62}," {",[41,134,136],{"class":135},"s7zQu"," return",[41,138,140],{"class":139},"sTEyZ"," price",[41,142,143],{"class":62}," *",[41,145,147],{"class":146},"sbssI"," 0.8",[41,149,150],{"class":62},";",[41,152,153],{"class":62}," }\n",[41,155,157],{"class":43,"line":156},7,[41,158,97],{"class":62},[41,160,162,164,167,169,171],{"class":43,"line":161},8,[41,163,103],{"class":54},[41,165,166],{"class":58}," BlackFridayDiscount",[41,168,109],{"class":54},[41,170,59],{"class":58},[41,172,63],{"class":62},[41,174,176,178,180,182,184,186,188,190,192,194,196,199,201],{"class":43,"line":175},9,[41,177,70],{"class":69},[41,179,73],{"class":62},[41,181,77],{"class":76},[41,183,80],{"class":62},[41,185,83],{"class":58},[41,187,129],{"class":62},[41,189,132],{"class":62},[41,191,136],{"class":135},[41,193,140],{"class":139},[41,195,143],{"class":62},[41,197,198],{"class":146}," 0.5",[41,200,150],{"class":62},[41,202,153],{"class":62},[41,204,206],{"class":43,"line":205},10,[41,207,97],{"class":62},[11,209,211],{"id":210},"when-youll-hear-this","When You'll Hear This",[16,213,214],{},"\"Adding a new payment method shouldn't require editing the checkout class.\" \u002F \"Follow Open-Closed and you'll never break existing tests adding new features.\"",[216,217,218],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":51,"depth":51,"links":220},[221,222,223,224],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":210,"depth":51,"text":211},"architecture","Open-Closed means your code should be open for adding new features but closed for editing old working code.","intermediate","md","o",{},true,"\u002Fterms\u002Fo\u002Fopen-closed",[234,235,236,237],"SOLID","Strategy Pattern","Dependency Inversion","Polymorphism",{"title":5,"description":226},{"changefreq":240,"priority":241},"weekly",0.7,"terms\u002Fo\u002Fopen-closed","S7UYEFWUwcdga3wfh5tS3h8KHSVvamzbe9OP0tG2rhA",[245,248,251,254],{"title":236,"path":246,"acronym":6,"category":225,"difficulty":227,"description":247},"\u002Fterms\u002Fd\u002Fdependency-inversion","Dependency Inversion says high-level code shouldn't depend on low-level code — both should depend on abstractions.",{"title":237,"path":249,"acronym":6,"category":225,"difficulty":227,"description":250},"\u002Fterms\u002Fp\u002Fpolymorphism","Polymorphism means the same method call can do different things depending on which object it's called on. Call 'speak()' on a Dog and you get a bark.",{"title":234,"path":252,"acronym":234,"category":225,"difficulty":227,"description":253},"\u002Fterms\u002Fs\u002Fsolid","SOLID is five rules for writing code that doesn't turn into a nightmare over time. Each letter stands for a different rule.",{"title":235,"path":255,"acronym":6,"category":225,"difficulty":227,"description":256},"\u002Fterms\u002Fs\u002Fstrategy-pattern","You're writing a sorter and want to sort by price, name, or date depending on user choice.",1776518299390]