{"id":8458,"date":"2016-06-17T10:54:27","date_gmt":"2016-06-17T10:54:27","guid":{"rendered":"https:\/\/dev.railscarma.com\/how-to-add-functionality-to-ruby-classes-with-decorators\/"},"modified":"2021-06-06T12:05:55","modified_gmt":"2021-06-06T12:05:55","slug":"come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/it\/blog\/uncategorized\/come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori\/","title":{"rendered":"Come aggiungere funzionalit\u00e0 alle classi Ruby con i decoratori"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"8458\" class=\"elementor elementor-8458\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6fd970f1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6fd970f1\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-442169c1\" data-id=\"442169c1\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-766e4dc8 elementor-widget elementor-widget-text-editor\" data-id=\"766e4dc8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<span style=\"font-size: medium;\">I decoratori ci permettono di aggiungere comportamenti agli oggetti in runtime e non influenzano altri oggetti della classe. I decoratori possono essere applicati quando \u00e8 necessario aggiungere e rimuovere dinamicamente la responsabilit\u00e0 a una classe. Il pattern decoratore \u00e8 un&#039;utile alternativa alla creazione di sottoclassi. Forniscono funzionalit\u00e0 aggiuntive a una classe pur mantenendo coerente l&#039;API pubblica. Diamo un&#039;occhiata ad un esempio per comprendere l&#039;importanza dei Ruby Decorators. <\/span>\n\n<span style=\"font-size: medium;\">consideriamo di avere una classe Tattoo con un metodo di prezzo che restituisce 300.<\/span>\n<blockquote><span style=\"font-size: medium;\">Classe Tattoo prezzo def 300 fine fine<\/span><\/blockquote>\n<span style=\"font-size: medium;\">Ora aggiungeremo un colore extra come caratteristica e il prezzo aumenter\u00e0 di 150<\/span>\n\n<span style=\"font-size: medium;\">Il modo pi\u00f9 semplice \u00e8 creare una sottoclasse TattooWithColour che restituisca 450 nel metodo del prezzo.<\/span>\n<blockquote><span style=\"font-size: medium;\">class TattooWithColour &lt; Tattoo def prezzo 450 end end<\/span><\/blockquote>\n<span style=\"font-size: medium;\">Successivamente, dobbiamo rappresentare un grande tatuaggio che aggiunga 200 al prezzo dei nostri tatuaggi. Possiamo rappresentare questo utilizzando una sottoclasse Big Tattoo di Tattoo.<\/span>\n<blockquote><span style=\"font-size: medium;\">classe Big Tattoo &lt; Tattoo def prezzo 500 end end<\/span><\/blockquote>\n<span style=\"font-size: medium;\">Potremmo anche avere tatuaggi di dimensioni pi\u00f9 grandi e potrebbero aggiungere ulteriore prezzo al nostro Big Tattoo. Se dovessimo considerare che questi tipi di tatuaggi potrebbero essere usati con i colori, dovremmo aggiungere le sottoclassi Big Tattoo With Colour e Bigger Tattoo With Colour.<\/span>\n\n<span style=\"font-size: medium;\">Con questo metodo, otteniamo un totale di 6 classi. Puoi anche raddoppiare il numero se vuoi rappresentare queste combinazioni con disegni extra sul tatuaggio.<\/span>\n<h1 class=\"western\"><a name=\"h.m63nvlo5wb6n\"><\/a> <span style=\"font-family: Calibri,serif;\"><span style=\"font-size: medium;\"><b>Ereditariet\u00e0 dinamica con i moduli<\/b><\/span><\/span><\/h1>\n<span style=\"font-family: Calibri,serif;\"><span style=\"font-size: medium;\">Per semplificare il nostro codice, potremmo utilizzare moduli per aggiungere dinamicamente comportamenti alla nostra classe Tattoo. Scriviamo i moduli Colour Tattoo e Big Tattoo per questo.<\/span><\/span>\n<blockquote><span style=\"font-size: medium;\">modulo Colour Tattoo def prezzo super + 150 fine fine<\/span><\/blockquote>\n<blockquote>modulo Big Tattoo def prezzo super + 200 fine fine<\/blockquote>\n<span style=\"font-size: medium;\">Ora possiamo estendere dinamicamente i nostri oggetti tatuaggio utilizzando il metodo Object#extend.<\/span>\n\n<span style=\"font-size: medium;\">tatuaggio = Tattoo.nuovo tatuaggio.extend(ColourTattoo) tatuaggio.extend(GrandeTatuaggio) <\/span>\n\n<span style=\"font-size: medium;\">Questo \u00e8 un buon miglioramento rispetto alla nostra implementazione basata sull&#039;ereditariet\u00e0. Invece di avere sottoclassi, abbiamo solo una classe e 3 moduli. Se avessimo bisogno di aggiungere ulteriore progettazione all&#039;equazione, avremmo bisogno solo di quattro moduli invece di 12 classi.<\/span>\n<h1 class=\"western\"><a name=\"h.wafqjdfxo3j0\"><\/a> <span style=\"font-size: medium;\"><b>Applicazione del motivo decoratore<\/b><\/span><\/h1>\n<span style=\"font-size: medium;\">Questa soluzione basata su moduli ha semplificato notevolmente il nostro codice, ma possiamo ancora migliorarlo utilizzando il decoratore. Considereremo un BiggerTatto come formato aggiungendo due volte 150 al costo di un tatuaggio.<\/span>\n\n<span style=\"font-size: medium;\">Non possiamo farlo con il nostro approccio basato sui moduli. Sarebbe forte la tentazione di chiamare due volte tattoo.extend(Big Tattoo) per ottenere Bigger Tattoo. La seconda estensione del modulo non ha effetto quando abbiamo gi\u00e0 utilizzato quelli di estensione.<\/span>\n\n<span style=\"font-size: medium;\">Se dovessimo continuare ad utilizzare la stessa implementazione, avremmo bisogno di un modulo Bigger Tattoo che restituisca super + 300 come costo. Possiamo invece utilizzare un decoratore che pu\u00f2 essere composto per creare oggetti complessi. Iniziamo con un decoratore chiamato Big Tattoo che avvolge un oggetto Tattoo.<\/span>\n<blockquote><span style=\"font-size: medium;\">class BigTatto def inizializza(tattoo) @tattoo = fine tatuaggio<\/span><\/blockquote>\n<blockquote>def prezzo @tattoo.price + 150 end end<\/blockquote>\n<span style=\"font-size: medium;\">Ora \u00e8 possibile creare un tatuaggio pi\u00f9 grande utilizzando questo wrapper due volte su un oggetto tatuaggio.<\/span>\n\n<span style=\"font-size: medium;\">tatuaggio = Tattoo.nuovo big_tattoo= Grandetatuaggio.new(tattoo) pi\u00f9 grande_tattoo = Grandetatuaggio.new(big_tattoo)<\/span>\n\n<span style=\"font-size: medium;\">Allo stesso modo possiamo rappresentare il tatuaggio a colori utilizzando un decoratore TattooWithColour. Utilizzando solo tre classi, ora siamo in grado di rappresentare 6 tipi di tatuaggio.<\/span>\n\n<span style=\"font-size: medium;\">Con una ricca esperienza in tutti gli aspetti dello sviluppo di Ruby On Rails, noi di <a href=\"https:\/\/www.railscarma.com\/it\/\">Railscarma<\/a>, ti offriamo un&#039;ampia gamma di servizi per aiutarti a implementare una strategia completa e personalizzata per comunicare con i tuoi potenziali clienti e i tuoi clienti al momento giusto, attraverso i canali giusti. Per ulteriori dettagli<a href=\"\/it\/contattaci\/\"> Contattaci.<\/a><\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c5bbaf8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6c5bbaf8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5f199228\" data-id=\"5f199228\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9bd6b46 elementor-widget elementor-widget-heading\" data-id=\"9bd6b46\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Iscriviti per gli ultimi aggiornamenti<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4adf8479 elementor-widget elementor-widget-shortcode\" data-id=\"4adf8479\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t\t\t\t<script type=\"text\/javascript\">\n\t\t\t\t\t\tvar gCaptchaSibWidget;\n                        var onloadSibCallbackInvisible = function () {\n\n                            var element = document.getElementsByClassName('sib-default-btn');\n                            var countInvisible = 0;\n                            var indexArray = [];\n                            jQuery('.sib-default-btn').each(function (index, el) {\n                                if ((jQuery(el).attr('id') == \"invisible\")) {\n                                    indexArray[countInvisible] = index;\n                                    countInvisible++\n                                }\n                            });\n\n                            jQuery('.invi-recaptcha').each(function (index, el) {\n                                grecaptcha.render(element[indexArray[index]], {\n                                    'sitekey': jQuery(el).attr('data-sitekey'),\n                                    'callback': sibVerifyCallback,\n                                });\n                            });\n                        };\n\t\t\t\t\t<\/script>\n\t\t\t\t\t                <script src=\"https:\/\/www.google.com\/recaptcha\/api.js?onload=onloadSibCallbackInvisible&render=explicit\" async defer><\/script>\n\t\t\t\t\n\t\t\t<form id=\"sib_signup_form_1\" method=\"post\" class=\"sib_signup_form\" action=\"\">\n\t\t\t\t<div class=\"sib_loader\" style=\"display:none;\"><img\n\t\t\t\t\t\t\tsrc=\"https:\/\/www.railscarma.com\/wp-includes\/images\/spinner.gif\" alt=\"caricatore\"><\/div>\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_action\" value=\"subscribe_form_submit\">\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_id\" value=\"1\">\n                <input type=\"hidden\" name=\"sib_form_alert_notice\" value=\"Please fill out this field\">\n                <input type=\"hidden\" name=\"sib_form_invalid_email_notice\" value=\"Your email address is invalid\">\n                <input type=\"hidden\" name=\"sib_security\" value=\"d7f7626ab9\">\n\t\t\t\t<div class=\"sib_signup_box_inside_1\">\n\t\t\t\t\t<div style=\"\/*display:none*\/\" class=\"sib_msg_disp\">\n\t\t\t\t\t<\/div>\n                                            <div id=\"sib_captcha_invisible\" class=\"invi-recaptcha\" data-sitekey=\"6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3\"><\/div>\n                    \t\t\t\t\t<p class=\"sib-email-area\">\r\n    <label class=\"sib-email-area\"><\/label>\r\n    <input type=\"email\" class=\"sib-email-area\" name=\"email\" required=\"required\" placeholder=\"Indirizzo e-mail\">\r\n<\/p>\r\n<p class=\"sib-NAME-area\">\r\n    <label class=\"sib-NAME-area\"><\/label>\r\n    <input type=\"text\" class=\"sib-NAME-area\" name=\"NAME\" placeholder=\"Nome\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"sottoscrivi\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"it\"\/><\/form>\n\t\t\t<style>\n\t\t\t\tform#sib_signup_form_1 p.sib-alert-message {\n    padding: 6px 12px;\n    margin-bottom: 20px;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\nform#sib_signup_form_1 p.sib-alert-message-error {\n    background-color: #f2dede;\n    border-color: #ebccd1;\n    color: #a94442;\n}\nform#sib_signup_form_1 p.sib-alert-message-success {\n    background-color: #dff0d8;\n    border-color: #d6e9c6;\n    color: #3c763d;\n}\nform#sib_signup_form_1 p.sib-alert-message-warning {\n    background-color: #fcf8e3;\n    border-color: #faebcc;\n    color: #8a6d3b;\n}\n\t\t\t<\/style>\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t  <div class=\"related-post slider\">\r\n        <div class=\"headline\">Articoli correlati<\/div>\r\n    <div class=\"post-list owl-carousel\">\r\n\r\n            <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Gemma Kaminari\" href=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/gemma-di-kaminari\/?related_post_from=37277\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"gemma di Kaminari\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Gemma Kaminari\" href=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/gemma-di-kaminari\/?related_post_from=37277\">\r\n        Gemma Kaminari  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/perche-assumere-sviluppatori-di-ruby-on-rails\/?related_post_from=30627\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"perch\u00e9 assumere sviluppatori di Ruby on Rails nel 2022\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/perche-assumere-sviluppatori-di-ruby-on-rails\/?related_post_from=30627\">\r\n        Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/importanza-dellarchitettura-software-nello-sviluppo-di-software-aziendale\/?related_post_from=36250\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/importanza-dellarchitettura-software-nello-sviluppo-di-software-aziendale\/?related_post_from=36250\">\r\n        Importanza dell&#039;architettura software nello sviluppo di software aziendale  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/ruby-ide-le-migliori-idee-per-lo-sviluppo-di-ruby-on-rails\/?related_post_from=36125\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"LE MIGLIORI IDEE PER LO SVILUPPO DI RUBY ON RAILS\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/ruby-ide-le-migliori-idee-per-lo-sviluppo-di-ruby-on-rails\/?related_post_from=36125\">\r\n        Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails  <\/a>\r\n\r\n        <\/div>\r\n      \r\n  <\/div>\r\n\r\n  <script>\r\n      <\/script>\r\n  <style>\r\n    .related-post {}\r\n\r\n    .related-post .post-list {\r\n      text-align: left;\r\n          }\r\n\r\n    .related-post .post-list .item {\r\n      margin: 10px;\r\n      padding: 10px;\r\n          }\r\n\r\n    .related-post .headline {\r\n      font-size: 14px !important;\r\n      color: #999999 !important;\r\n          }\r\n\r\n    .related-post .post-list .item .post_thumb {\r\n      max-height: 220px;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n          }\r\n\r\n    .related-post .post-list .item .post_title {\r\n      font-size: 14px;\r\n      color: #000000;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .post-list .item .post_excerpt {\r\n      font-size: 12px;\r\n      color: #3f3f3f;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .owl-dots .owl-dot {\r\n          }\r\n\r\n      <\/style>\r\n      <script>\r\n      jQuery(document).ready(function($) {\r\n        $(\".related-post .post-list\").owlCarousel({\r\n          items: 2,\r\n          responsiveClass: true,\r\n          responsive: {\r\n            0: {\r\n              items: 1,\r\n            },\r\n            768: {\r\n              items: 2,\r\n            },\r\n            1200: {\r\n              items: 2,\r\n            }\r\n          },\r\n                      rewind: true,\r\n                                loop: true,\r\n                                center: false,\r\n                                autoplay: true,\r\n            autoplayHoverPause: true,\r\n                                nav: true,\r\n            navSpeed: 1000,\r\n            navText: ['<i class=\"fas fa-chevron-left\"><\/i>', '<i class=\"fas fa-chevron-right\"><\/i>'],\r\n                                dots: false,\r\n            dotsSpeed: 1200,\r\n                                                    rtl: false,\r\n          \r\n        });\r\n      });\r\n    <\/script>\r\n  <\/div>","protected":false},"excerpt":{"rendered":"<p>Decorators allow us to add behavior to objects in runtime and don\u2019t affect other objects of the class. Decorators can be applied when you need to dynamically add and remove responsibility to a class. The decorator pattern is a helpful alternative to creating sub-classes. They give additional functionality to a class while still keeping the &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.railscarma.com\/it\/blog\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Ruby Regex Match Guide (2026) with Examples<\/span> Leggi altro \"<\/a><\/p>","protected":false},"author":1,"featured_media":31904,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[384,1],"tags":[],"class_list":["post-8458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-articles","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Add Functionality to Ruby Classes with Decorators - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development<\/title>\n<meta name=\"description\" content=\"Decorators allow us to add behavior to objects in runtime and don\u2019t affect other objects of the class. Decorators can be applied when you need to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.railscarma.com\/it\/blog\/uncategorized\/come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Add Functionality to Ruby Classes with Decorators - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"og:description\" content=\"Decorators allow us to add behavior to objects in runtime and don\u2019t affect other objects of the class. Decorators can be applied when you need to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.railscarma.com\/it\/blog\/uncategorized\/come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori\/\" \/>\n<meta property=\"og:site_name\" content=\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/RailsCarma\/\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-17T10:54:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-06T12:05:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@railscarma\" \/>\n<meta name=\"twitter:site\" content=\"@railscarma\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\"},\"headline\":\"How to Add Functionality to Ruby Classes with Decorators\",\"datePublished\":\"2016-06-17T10:54:27+00:00\",\"dateModified\":\"2021-06-06T12:05:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/\"},\"wordCount\":593,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg\",\"articleSection\":[\"Technical Articles\",\"Uncategorized\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/\",\"url\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/\",\"name\":\"How to Add Functionality to Ruby Classes with Decorators - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg\",\"datePublished\":\"2016-06-17T10:54:27+00:00\",\"dateModified\":\"2021-06-06T12:05:55+00:00\",\"description\":\"Decorators allow us to add behavior to objects in runtime and don\u2019t affect other objects of the class. Decorators can be applied when you need to\",\"breadcrumb\":{\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.railscarma.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Add Functionality to Ruby Classes with Decorators\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.railscarma.com\/#website\",\"url\":\"https:\/\/www.railscarma.com\/\",\"name\":\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"description\":\"RailsCarma is a Ruby on Rails Development Company in Bangalore. We specialize in Offshore Ruby on Rails Development based out in USA and India. Hire experienced Ruby on Rails developers for the ultimate Web Experience.\",\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.railscarma.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"width\":200,\"height\":46,\"caption\":\"RailsCarma\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/RailsCarma\/\",\"https:\/\/x.com\/railscarma\",\"https:\/\/www.linkedin.com\/company\/railscarma\/\",\"https:\/\/myspace.com\/railscarma\",\"https:\/\/in.pinterest.com\/railscarma\/\",\"https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Come aggiungere funzionalit\u00e0 alle classi Ruby con decoratori - RailsCarma - Ruby on Rails Development Company specializzata nello sviluppo offshore","description":"I decoratori ci permettono di aggiungere comportamenti agli oggetti in runtime e non influenzano altri oggetti della classe. I decoratori possono essere applicati quando necessario","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.railscarma.com\/it\/blog\/uncategorized\/come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori\/","og_locale":"it_IT","og_type":"article","og_title":"How to Add Functionality to Ruby Classes with Decorators - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","og_description":"Decorators allow us to add behavior to objects in runtime and don\u2019t affect other objects of the class. Decorators can be applied when you need to","og_url":"https:\/\/www.railscarma.com\/it\/blog\/uncategorized\/come-aggiungere-funzionalita-alle-classi-ruby-con-i-decoratori\/","og_site_name":"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","article_publisher":"https:\/\/www.facebook.com\/RailsCarma\/","article_published_time":"2016-06-17T10:54:27+00:00","article_modified_time":"2021-06-06T12:05:55+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@railscarma","twitter_site":"@railscarma","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#article","isPartOf":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/"},"author":{"name":"admin","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21"},"headline":"How to Add Functionality to Ruby Classes with Decorators","datePublished":"2016-06-17T10:54:27+00:00","dateModified":"2021-06-06T12:05:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/"},"wordCount":593,"commentCount":0,"publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"image":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg","articleSection":["Technical Articles","Uncategorized"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/","url":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/","name":"Come aggiungere funzionalit\u00e0 alle classi Ruby con decoratori - RailsCarma - Ruby on Rails Development Company specializzata nello sviluppo offshore","isPartOf":{"@id":"https:\/\/www.railscarma.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage"},"image":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg","datePublished":"2016-06-17T10:54:27+00:00","dateModified":"2021-06-06T12:05:55+00:00","description":"I decoratori ci permettono di aggiungere comportamenti agli oggetti in runtime e non influenzano altri oggetti della classe. I decoratori possono essere applicati quando necessario","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#primaryimage","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/06\/ror-development-1.jpg","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.railscarma.com\/de\/blog\/uncategorized\/so-fugen-sie-ruby-klassen-mithilfe-von-dekoratoren-funktionalitat-hinzu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.railscarma.com\/"},{"@type":"ListItem","position":2,"name":"How to Add Functionality to Ruby Classes with Decorators"}]},{"@type":"WebSite","@id":"https:\/\/www.railscarma.com\/#website","url":"https:\/\/www.railscarma.com\/","name":"RailsCarma - Societ\u00e0 di sviluppo Ruby on Rails specializzata nello sviluppo offshore","description":"RailsCarma \u00e8 una societ\u00e0 di sviluppo Ruby on Rails a Bangalore. Siamo specializzati nello sviluppo offshore di Ruby on Rails con sede negli Stati Uniti e in India. Assumi sviluppatori esperti di Ruby on Rails per la migliore esperienza Web.","publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.railscarma.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"RailsCarma","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","width":200,"height":46,"caption":"RailsCarma"},"image":{"@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/RailsCarma\/","https:\/\/x.com\/railscarma","https:\/\/www.linkedin.com\/company\/railscarma\/","https:\/\/myspace.com\/railscarma","https:\/\/in.pinterest.com\/railscarma\/","https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg"]},{"@type":"Person","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21","name":"amministratore","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/"]}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts\/8458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/comments?post=8458"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts\/8458\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/media\/31904"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/media?parent=8458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/categories?post=8458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/tags?post=8458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}