{"id":10301,"date":"2025-05-28T12:39:06","date_gmt":"2025-05-28T11:39:06","guid":{"rendered":"https:\/\/republify.se\/?post_type=product&#038;p=10301"},"modified":"2026-01-08T18:51:16","modified_gmt":"2026-01-08T17:51:16","slug":"design-patterns-och-anti-patterns","status":"publish","type":"product","link":"https:\/\/republify.se\/index.php\/produkt\/design-patterns-och-anti-patterns\/","title":{"rendered":"Design patterns och anti patterns"},"content":{"rendered":"<div class=\"elementor-element elementor-element-7723ba8 elementor-widget elementor-widget-text-editor\" data-id=\"7723ba8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n<div class=\"elementor-widget-container\">\n<div class=\"elementor-element elementor-element-70419e9c elementor-widget elementor-widget-text-editor\" data-id=\"70419e9c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n<div class=\"elementor-widget-container\">\n<div class=\"elementor-element elementor-element-4b939308 elementor-widget elementor-widget-text-editor\" data-id=\"4b939308\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n<div class=\"elementor-widget-container\">\n<p>De patterns vi g\u00e5r igenom \u00e4r s\u00e5 pass generella att de \u00e4r spr\u00e5kagnostiska, s\u00e5 l\u00e4nge vi pratar om objektorienterade spr\u00e5k som C++, C#, Java eller TypeScript.<\/p>\n<p><strong>M\u00e5lgrupp<\/strong><br \/>\nM\u00e5lgruppen \u00e4r mjukvaruutvecklare som vill f\u00f6rdjupa sig inom objektorienterad programmering.<\/p>\n<p><strong>M\u00e5l<\/strong><br \/>\nEfter kursens slut kommer du k\u00e4nna till vilka design patterns som finns, vilka problem de l\u00f6ser och hur man implementerar dem. Du kommer ocks\u00e5 l\u00e4ra dig att k\u00e4nna igen vanligt f\u00f6rekommande fallgropar (s.k. code smells), l\u00e4ra dig vad man kan g\u00f6ra \u00e5t dem och hur du kan undvika att hamna d\u00e4r fr\u00e5n b\u00f6rjan n\u00e4r du skriver kod.<\/p>\n<p><strong>Bakgrundskunskaper<\/strong><br \/>\nDu f\u00f6rv\u00e4ntas ha k\u00e4nnedom om objektorienterad programmering.<\/p>\n<p><strong>Spr\u00e5k<\/strong><br \/>\nUtbildningsmaterialet \u00e4r skrivet p\u00e5 engelska. Utbildningen kan genomf\u00f6ras antingen p\u00e5 svenska eller engelska.<\/p>\n<p><strong>Kurslitteratur<\/strong><br \/>\nSom kurslitteratur anv\u00e4nds:<\/p>\n<ul>\n<li>Design Patterns av Erich Gamma, Rchard Helm, Ralph Johnsson och John Vlissides (&#8221;Gang of four&#8221;),\u00a0ISBN: 0-201-63361-2<\/li>\n<li>Antipatterns av William J. Brown, Raphael C. Malveau, Hays W. &#8221;Skip&#8221; McCormick, Thomas J. Mowbray,\u00a0ISBN: 978-0-471-19713-3<\/li>\n<\/ul>\n<p><strong><br \/>\nKursl\u00e4ngd<\/strong><br \/>\nKursen genomf\u00f6rs under tre dagar<\/p>\n<p><strong>Inneh\u00e5ll<\/strong><br \/>\nI kursen g\u00e5r vi igenom:<\/p>\n<p><strong>Skapande DesignPattern med tillh\u00f6rande antipattern<br \/>\nDesign pattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Factory Method \u2013 L\u00e5t subklasser best\u00e4mma vilken klass som ska instansieras.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Abstract Factory \u2013 Skapa familjer av relaterade objekt utan att binda till konkreta klasser.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Builder \u2013 Bygg komplexa objekt steg f\u00f6r steg med konfigurerbara delar.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Singleton \u2013 S\u00e4kerst\u00e4ll att en klass bara har en instans och ge global \u00e5tkomst till den.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Prototype \u2013 Skapa nya objekt genom att klona en existerande instans.<\/p>\n<p><strong>AntiPattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Poltergeist \u2013 Kortlivade objekt som bara vidarebefordrar anrop eller bygger n\u00e5got trivialt.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Overengineering \u2013 On\u00f6digt komplexa abstraktioner utan verkligt behov.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Singleton Abuse \u2013 Singleton anv\u00e4nds f\u00f6r globalt tillst\u00e5nd snarare \u00e4n kontrollerad \u00e5tkomst.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Lava Flow \u2013 \u00d6vergiven eller halvklar kod som lever kvar i projektet.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 God Factory \u2013 En fabrik som skapar alla typer och v\u00e4xer okontrollerat.<\/p>\n<p><strong>Strukturella DesignPattern med tillh\u00f6rande antipattern<br \/>\nDesignPattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Adapter \u2013 Anpassa ett gr\u00e4nssnitt till ett annat som klienten f\u00f6rv\u00e4ntar sig.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Bridge \u2013 Separera abstraktion fr\u00e5n implementation s\u00e5 de kan utvecklas oberoende.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Composite \u2013 Behandla enskilda objekt och sammans\u00e4ttningar p\u00e5 samma s\u00e4tt.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Decorator \u2013 L\u00e4gg till ansvar p\u00e5 objekt dynamiskt utan att \u00e4ndra dess klass.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Facade \u2013 Erbjud ett f\u00f6renklat gr\u00e4nssnitt till ett komplext system.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Proxy \u2013 Kontrollera \u00e5tkomst till ett objekt via ett st\u00e4llf\u00f6retr\u00e4dande objekt.<\/p>\n<p><strong>Antipattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 God Object \u2013 Ett objekt som vet och g\u00f6r f\u00f6r mycket \u2013 bryter mot separation av ansvar.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Tight Coupling \u2013 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Komponenter \u00e4r f\u00f6r beroende av varandra f\u00f6r att kunna f\u00f6r\u00e4ndras isolerat.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Shotgun Surgery \u2013 En \u00e4ndring kr\u00e4ver modifiering p\u00e5 m\u00e5nga olika st\u00e4llen.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Magic Numbers \u2013 H\u00e5rdkodade tal utan f\u00f6rklarande namn eller syfte.<\/p>\n<p><strong>Beteendedesignpattern med tillh\u00f6rande antipattern<\/strong><\/p>\n<p><strong>DesignPattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Observer \u2013 Meddela flera objekt n\u00e4r ett annat objekts tillst\u00e5nd f\u00f6r\u00e4ndras.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Strategy\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u2013 V\u00e4lj beteende vid k\u00f6rning genom att byta ut logikobjekt.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 State \u2013 \u00c4ndra objektets beteende beroende p\u00e5 dess interna tillst\u00e5nd.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Command \u2013 Kapsla in ett anrop som ett objekt f\u00f6r att m\u00f6jligg\u00f6ra \u00e5ngra\/upprepa.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Chain of Responsibility \u2013 Skicka f\u00f6rfr\u00e5gningar l\u00e4ngs en kedja av hanterare tills n\u00e5gon tar ansvar.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Memento \u2013 Bevara och \u00e5terst\u00e4ll ett objekts interna tillst\u00e5nd utan att exponera det.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Mediator \u2013 Samordna kommunikation mellan komponenter via en central instans.<\/p>\n<p><strong>Antipattern<\/strong><br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Spaghetti Code \u2013 Ostrukturerad och sammanfl\u00e4tad kod med sv\u00e5rkontrollerat fl\u00f6de.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Copy-Paste Programming \u2013 Duplicerad kod ist\u00e4llet f\u00f6r att \u00e5teranv\u00e4nda eller abstrahera.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Premature Optimization \u2013 Komplicerad kod f\u00f6r att optimera prestanda innan det beh\u00f6vs.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Bad Error Handling \u2013 Ingen eller \u00f6verdriven hantering av fel; ofta med try-catch \u00f6verallt.<br \/>\n\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Inner-Platform Effect \u2013 \u00c5terskapar funktionalitet som redan finns i spr\u00e5ket eller plattformen.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h3>Kursen levereras i samarbete med Mindroad<\/h3>\n<h2><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>I den h\u00e4r kursen g\u00e5r vi igen vilka design patterns som finns, vilka problem de l\u00f6ser och hur man implementerar dem. Vi g\u00e5r \u00e4ven igenom vanliga antipatterns, hur de uppst\u00e5r, hur man identifierar dem och vad man kan g\u00f6ra \u00e5t dem b\u00e5de retroatktivt \u2013 f\u00f6r att ta sig ur den grop man sj\u00e4lv gr\u00e4vt \u00e5t sig \u2013 och proaktivt \u2013 f\u00f6r att undvika att man trillar ner (igen).<\/p>\n<p>Design patterns \u00e4r etablerade l\u00f6sningar p\u00e5 vanligt f\u00f6rekommande problem som anv\u00e4nts s\u00e5 pass ofta att de f\u00e5tt egna namn. Anti patterns \u00e4r etablerade problem orsakade av vanligt f\u00f6rekommande l\u00f6sningar som p\u00e5tr\u00e4ffats s\u00e5 pass ofta att de f\u00e5tt egna namn.<\/p>\n","protected":false},"featured_media":5419,"comment_status":"open","ping_status":"closed","template":"","meta":{"wds_primary_product_brand":0,"wds_primary_product_cat":0},"product_brand":[],"product_cat":[148,29],"product_tag":[],"class_list":{"0":"post-10301","1":"product","2":"type-product","3":"status-publish","4":"has-post-thumbnail","6":"product_cat-architecture","7":"product_cat-technical","9":"first","10":"instock","11":"taxable","12":"shipping-taxable","13":"purchasable","14":"product-type-simple"},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/product\/10301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/types\/product"}],"replies":[{"embeddable":true,"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/comments?post=10301"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/media\/5419"}],"wp:attachment":[{"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/media?parent=10301"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/product_brand?post=10301"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/product_cat?post=10301"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/republify.se\/index.php\/wp-json\/wp\/v2\/product_tag?post=10301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}