应用:在程序的一个算法中,其中有一小部分需要经常变动,而其他部分不变。

具体实现:对于经常变动的部分的这部分内容在父类中抽象出来,在子类中进行是实现。

缺点:是继承,增加了耦合;在算法中如果变动比较多,不适合这个设计模式。

#具体代码实现
class ReportTemplate
  def generate_report!
    retrieve_financial_data
    format_report
    send_to_stakeholders
  end

  private

  def retrieve_financial_data
    # Grab relevant data from our database
  end

  #这是父类中待实现的抽象
  def format_report
    raise NotImplementedError
  end

  def send_to_stakeholders
  end
end

#子类实现抽象
class TextReport < ReportTemplate
  def format_report
    # arrange financial data into plain text report
  end
end

class HTMLReport < ReportTemplate
  def format_report
    # arrange financial data into HTML report
  end
end

模板方法中的抽象方法和钩子方法(区别于included)

抽象方法:在基类中定义的方法,需要通过子类来进行实现

钩子方法:可以被具体类重载的非抽象方法

class ReportTemplate
  #抽象方法,子类如果调用必须实现
  def format_report 
    raise NotImplementedError
  end

  #非抽象方法,在具体类中可以实现,也可以不实现
  def send_to_stakeholders
  end 
end

[参考](https://medium.com/@joshsaintjacque/the-template-method-pattern-558f3e16879f)

results matching ""

    No results matching ""