# Define the skeleton of an algorithm in an operation, deferring some steps to # subclasses. Template method lets subclasses redefine certain steps of an # algorithm without changing the algorithm's structure. module Template #mandatory_methods = ["tagname", "content"] #optional_methods = ["font_size", "background_color"] def generate string = "<#{tagname}" styles = '' styles += "font-size:#{font_size};" if respond_to? :font_size styles += "background-color:#{background_color};" if respond_to? :background_color string += " style='#{styles}'" if !styles.empty? string += ">#{content}" end end class Body def tagname "body" end def content "hello" end def font_size "18pt" end include Template end # Usage body = Body.new body.generate