java 模板类 多个_java设计模式之模板方法模式

第一,使用场景

系统中算法的骨架是固定的时候,而算法的实现可能有很多种的时候,就需要使用模板方法模式,也就是说,某个方法要实现的算法需要多步骤,但是其中有一些步骤是固定不变的,而另外一些步骤则是固定的。为了提高代码的可扩展性,模板方法在这种场景下使用效率较高。

模板模式设计基本思路,定义一个算法的骨架,而将具体的算法延迟到子类中实现。

模板方法优点,可以灵活的实具体的算法,满足用户灵活多变的需求。

缺点,算法骨架需要改变时需要修改抽象类。

注:Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

模板方法是一种基于继承的代码复用技术,它是一种类行为模式。

第二,模板方法模式的结构和实现

1.模板结构

模板方法模式结构比较简单,其核心是抽象类和其中的模板方法的设计,其结构如图所示

模板方法模式包含两个角色:

(1)AbstractClass(抽象类):在抽象类中定义了一系列基本操作,这些基本操作可是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法,用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类子类中实现的基本方法,还可以调用其他对象中的方法。

(2)ConcreateClass(具体子类):它是抽象类的子类,用于实现父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体的基本操作。

2.模板方法的实现

(1)模板方法

一个模板方法是定义在抽象类中的,吧基本操作方法组合在一起形成一个总算法或者总行为的方法,这个模板方法定义在抽象类中,并有子类不加以修改地完全继承下来。模板方法是一个具体方法,他给出了一个顶层逻辑框架,而逻辑的组成步骤在抽象类中可以是具体实现,也可以是抽象方法。由于模板方法是具体方法,因此模板方法模式中的抽象层只能是抽象类,不是是接口。

(2)基本方法

基本方法是实现算法各个步骤的方法,是模板方法的组成部分,基本方法又可以划分为三种:抽象方法、具体方法和钩子方法。

抽象方法:一个抽象方法有抽象类声明,由其子类实现。

具体方法:一个具体方法由一个抽象类或者具体类声明并实现,其子类可以进行覆盖也可以直接继承。

钩子方法:一个钩子方法由一个抽象类或者具体类声明并实现,而其子类可能会加以扩展,通常在父类中给出的实现是一个空实现(可以使用virtual关键字将其定义为虚函数),并以改空实现作为方法的默认实现,钩子方法也可以提供一个非空的默认实现。

在模板方法中,钩子函数有两类,第一类是钩子方法可一个与一些具体步骤挂钩,以实现咱在不同条件下执行模板方法的不同步骤,这类钩子方法的返回类型通常是boolean类型,这类方法名一般是IsXXX(),用于对某个条件进行判断,如果满足则执行某一步骤,否则将不执行。还有一类钩子方法实现体为空的具体方法,子类可以根据需要覆盖或者集继承这些钩子函数,与抽象方法相比,这些类钩子方法的好处在于子类如果没有覆盖父类中定义的钩子方法,编译可以正常通过,但是如果没有覆盖父类中声明的抽象方法,编译将报错。

在模板方法模式中,由于面向对象的多态性,子类对象在运行时将覆盖父类对象,子类中定义的方法也将覆盖父类中定义的方法,因此程序在运行时,具体子类的基本方法将覆盖父类中定义的基本方法,子类的钩子方法也将覆盖父类的钩子方法,从而可以通过在子类中实现的钩子方法对父类方法的执行进行约束,实现子类对父类行为的反向控制。

---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值