设计模式之模板方法

简介: 设计模式之模板方法

模板方法介绍


模板方法模式是一种行为设计模式,它在超类中定义一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。


模板


模板方法模式建议将算法分解为一系列步骤,然后将这些步骤改为方法,最后在“模板方法”中依次调用这些方法。


步骤可以是抽象的,也可以有一些默认的实现。为了能够使用算法,客户端需要自行提供子类并实现所有的抽象步骤(有时候还需要重写步骤)。


模板方法将算法分解为步骤,并允许子类重写这些步骤,而非重写实际的模板方法。


分解步骤


1、抽取步骤必须由各个子类来实现;


2、可选步骤已有一些默认实现,但仍可在需要时进行重写。


模板方法的结构


  • 1、抽象类


声明作为算法步骤的方法,以及依次调用它们的实际模板方法。



算法步骤可以被声明为抽象类,默认提供一些实现。


  • 2、具体类


实现抽象方法的类,重写所有步骤,但不能重写模板方法自身。


适合场景


  • 1、当希望客户端扩展某个特定算法步骤,而不是整个算法或其结构时。


  • 2、当多个类的算法除了一些细微不同之处几乎完全一样时。


实现方式



1、分析目标算法,确定能否将其分解为多个步骤(从所有子类的角度出发,考虑哪些步骤能够通用,那些步骤各不相同)。


2、创建抽象基类并声明一个模板方法和代表算法步骤的一系列抽象方法(在模板方法中根据算法结构依次调用相应步骤)。


对于默认的实现,可以给部分步骤带来好处。同时可以考虑在算法的关键之间添加钩子。


3、为每个算法变体新建一个具体子类,它必须实现所有的抽象步骤,也可以重写部分可选步骤。


优点



1、你可仅允许客户端重写一个大型算法中的特定部分,使得算法其他部分修改对其所造成的影响减小。


2、可将重复的代码提取到一个超类中。


缺点




1、部分客户端会受到算法框架的限制。


2、会导致违法里氏替换原则,通过子类抑制默认步骤。


3、模板方法中步骤越多,后期的维护成本会增大。



Demo


它在基类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。

通常使用此模板方法来向框架用户提供通过继承实现的、对标准功能进行扩展的简单方式


提供的抽象类


实现抽象类的具体类


客户端和Main方法业务逻辑


首先我们可以看到在提供的抽象方法中,有一个模板方法,此方法用于执行基类声明的算法步骤。后面客户端只需要调用此方法就可以完成交给不同子类的业务。


不同的子类,由于继承相同的抽象类,首先必须实现抽象方法,其次可根据每个子类的业务需求各自来实现某些钩子方法,此方法用于在子类中超长发挥,各自都可以对进行变更,彼此不受影响。最后想要实现的是,我调用同样的方法代码,后面声明实现的两个类会得到不同的显示结果。


显示不同的结果


由于1号没有重写钩子方法,2号重写了。所以当在模板方法中调用One()时,1号没有进行任何操作,执行的是抽象类中的空方法,而2号重写了,则输出了重写的方法。

目录
相关文章
|
6月前
|
设计模式 算法 Java
模板方法--设计模式
模板方法--设计模式
49 0
|
6月前
|
设计模式 算法 Java
模板方法设计模式(TemplateMethod)
模板方法设计模式(TemplateMethod)
|
设计模式 算法 Java
设计模式系列教程(08) - 模板方法
设计模式系列教程(08) - 模板方法
46 0
|
6月前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
113 1
|
5月前
|
设计模式 算法
模板方法-大话设计模式
模板方法-大话设计模式
|
5月前
|
设计模式 存储 Java
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
28 0
|
设计模式 SQL 数据库
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
82 0
|
6月前
|
设计模式 算法 Java
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
|
6月前
|
设计模式 算法
设计模式之模板方法
设计模式之模板方法
|
设计模式 SQL 数据库
淘东电商项目(62) -聚合支付(基于模板方法设计模式管理支付回调-支付宝)
淘东电商项目(62) -聚合支付(基于模板方法设计模式管理支付回调-支付宝)
64 0