模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
有一个泡茶和冲咖啡的业务,他们都有差不多相似的流程。
一、不使用设计模式
1 | public class Tea { |
1 | public class Coffee { |
二、模板方法模式的使用
下面以一个代码样例来说明模板方法模式的使用。
1 | //定义模板方法 |
1 | public class Tea extends TemplateMethod { |
1 | public class Coffee extends TemplateMethod { |
1 | public class Test { |
三、使用钩子(hook)来做一些其它操作
1 | //定义模板方法 |
1 | public class TeaWithHook extends TemplateMethod { |
1 | public class CoffeeWithHook extends TemplateMethod { |
1 | public class TestHook { |
四、比较
不使用设计模式 | 使用模板方法模式 |
---|---|
Coffee和Tea主导一切;它们控制了算法 | TemplateMethod控制了一切,它拥有算法,并且保护这个算法 |
Coffee和Tea之间存在着重复的代码 | 通过TemplateMethod类实现了代码的复用 |
如果算法变了,需要修改Coffee和Tea类 | 新增算法或调整顺序只需要修改TemplateMethod类 |
由于类的组织不具有弹性,新加入第三种类型时需要完全重写一份 | 由于有模板存在,只需要实现差异化的逻辑即可 |
算法的知识和它的实现会分散在许多类中 | TemplateMethod类专注在算法本身,而由子类提供完整的实现 |
上一篇:设计模式系列之八外观模式
下一篇:设计模式系列之十迭代器模式