模板方法设计模式

Java23种设计模式(模板方法设计模式)

模式的定义与特点:

模板方法(Template Method)模式的定义下:定义了操作种的算法骨架,而将算法的一些步骤延迟到子类种,使得子类可以不改变算法结构的情况下重定义该该算法的某些特定步骤,它是一种类行为的模式。

该模式下的主要优点如下:

1.他封装了不变的部分,扩展可变的部分。他把认为是不变的部分的算法封装到父类种实现,而把不可变部分算法由子类继承实现,便于子类的继续扩展。
2.他在父类种提取了公共的部分代码,便于代码复用。
3.部分方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则。

该模式的主要缺点如下:
1.对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象
2.父类的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,他提高了代码阅读难度。

模式的结构与实现

模板方法模式需要注意抽象类与具体类之间的协作,他用到了虚函数的多态性技术及”不用掉我,让我来调你”的反向控制技术。现在用来介绍他们的基本结构。

1. 模式的结构

模板方法模式包含了以下主要特色。
**(1)抽象类(Abstract Class):**负责给出一个算法的轮廓和骨架。他又一个模板方法和若干个基本方法构成。这邪恶方法的定义如下。
A 模板方法:定义了算法的骨架,按照某种顺序调用其包含的基本方法。
B 基本方法:是整个算法中的一个步骤,包含以下几种类型。
抽象方法:在抽象类中申明,有具体子类实现
具体方法:在抽象类中以实现,在具体子类中可以继承或重写他
钩子方法:在抽象类中已经实现,包括用于半段的逻辑方法和需要子类重写的空方法两种。
**(2)具体子类(Concrete Class):**实现抽象类中所定义的抽象方法和钩子方法,他们是一个顶级逻辑的一个组成步骤。

在这里插入图片描述
2.模式的实现
模板方法模式的代码如下:

package templateMethod;

public class TemplateMethodPattern
{
    public static void main(String[] args)
    {
        AbstractClass tm=new ConcreteClass();
        tm.TemplateMethod();
    }
}

//抽象类
abstract class AbstractClass
{
    public void TemplateMethod() //模板方法
    {
        SpecificMethod();
        abstractMethod1();          
        abstractMethod2();
    }  
    public void SpecificMethod() //具体方法
    {
        System.out.println("抽象类中的具体方法被调用...");
    }   
    public abstract void abstractMethod1(); //抽象方法1
    public abstract void abstractMethod2(); //抽象方法2
}

//具体子类

class ConcreteClass extends AbstractClass
{
    public void abstractMethod1()
    {
        System.out.println("抽象方法1的实现被调用...");
    }   
    public void abstractMethod2()
    {
        System.out.println("抽象方法2的实现被调用...");
    }
}

=======================================================================
程序的运行结果如下:

抽象类中的具体方法被调用了.....
抽象类方法1的实现被调用了.....
抽象类方法2的实现被调用.....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值