应用:在程序的一个算法中,其中有一小部分需要经常变动,而其他部分不变。
具体实现:对于经常变动的部分的这部分内容在父类中抽象出来,在子类中进行是实现。
缺点:是继承,增加了耦合;在算法中如果变动比较多,不适合这个设计模式。
#具体代码实现
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)