パンくず
リファクタリング-プログラマーの体質改善テクニック
継承の取り扱い
継承による委譲の置き換え
内容
リファクタリング名
継承による委譲の置き換え
適用内容要約
委譲先のクラスをモジュールにして、委譲元のクラスでインクルードする
適用詳細
委譲先の全メソッドを利用しているような場合、継承への置き換えを検討します
サンプル
HTMLタグを表す機能と、Divタグを表す機能を実装します。
サンプルコード
# encoding: Shift_JIS class HtmlTag attr_accessor:tag_name def initialize(tag_name) @tag_name=tag_name end def output_start_tag() return "<#{@tag_name}>" end def output_close_tag() return "</#{@tag_name}>" end def get_html_contents(value) result = "" result << output_start_tag result << value result << output_close_tag return result end end class DivTag attr_accessor:html_tag def initialize() @html_tag=HtmlTag.new("div") end def output_start_tag() return @html_tag.output_start_tag end def output_close_tag() return @html_tag.output_close_tag end def get_html_contents(value) result = "" result << output_start_tag result << value result << output_close_tag return result end end puts HtmlTag.new("span").get_html_contents "inner text" puts DivTag.new().get_html_contents "inner text"
# encoding: Shift_JIS class HtmlTag attr_accessor:tag_name def initialize(tag_name) @tag_name=tag_name end def output_start_tag() return "<#{@tag_name}>" end def output_close_tag() return "</#{@tag_name}>" end def get_html_contents(value) result = "" result << output_start_tag result << value result << output_close_tag return result end end class DivTag < HtmlTag def initialize() @tag_name="div" end end puts HtmlTag.new("span").get_html_contents "inner text" puts DivTag.new().get_html_contents "inner text"
出力(共通)
<span>inner text</span> <div>inner text</div>