23种设计模式之行为型模式:模板方法模式

一:什么是模板方法模式

在模板模式(Template Pattern)中,抽象类公开定义了执行它的方法的方式/模板。子类可以按需重写方法实现,但调用将以抽象类中定义的公开方法进行。这种类型的设计模式属于行为型模式。

二:进一步了解模板方法模式

目的:
(抽象类中)定义一个操作骨架(方法),将一些步骤延迟到子类中(实现重写)。
模板方法使得子类可以不改变父类中的方法结构 即可重定义该算法的某些特定步骤(就是重写)。

主要解决:
一些方法通用,却在每一个子类都重新写了这一方法。

何时使用:
有一些通用的方法。
(比如去医院,要挂号、排队、检查、缴费,这些同样的步骤就可以在抽象类中用方法统一实现)

如何解决:
将这些通用算法抽象出来。

关键代码:
在抽象类实现,其他步骤在子类实现。

优点:
1、封装不变部分,扩展可变部分。
2、提取公共代码,便于维护。
3、行为由父类控制,子类实现。

缺点:
每一个不同的实现都需要一个子类来实现,导致的个数增加,使得系统更加庞大

注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。

三:实现

场景,去医院看病流程

挂号、排队、检查、缴费

医院流程 抽象类

//医院流程 抽象类
public abstract class Hospital {
    //挂号
    abstract void register();
    //排队
    abstract void lineUp();
    //检查
    abstract void inspect();
    //缴费
    abstract void pay();
    //任何医院流程的通用方法
    public final void goToHospital(){
        register();
        lineUp();
        inspect();
        pay();
    }
}

抽象类的实现

//抽象类的实现
public class ShantouHospital extends Hospital {
    @Override
    void register() {
        System.out.println("在汕头医院进行挂号...");
    }

    @Override
    void lineUp() {
        System.out.println("在汕头医院进行排队...");
    }

    @Override
    void inspect() {
        System.out.println("在汕头医院进行检查...");
    }

    @Override
    void pay() {
        System.out.println("在汕头医院进行缴费...");
    }
}

抽象类的实现

//抽象类的实现
public class ShenzhenHospital extends Hospital {
    @Override
    void register() {
        System.out.println("在深圳医院进行挂号...");
    }

    @Override
    void lineUp() {
        System.out.println("在深圳医院进行排队...");
    }

    @Override
    void inspect() {
        System.out.println("在深圳医院进行检查...");
    }

    @Override
    void pay() {
        System.out.println("在深圳医院进行缴费...");
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        ShantouHospital shantouHospital = new ShantouHospital();
        shantouHospital.goToHospital();
        System.out.println("============================");
        ShenzhenHospital shenzhenHospital = new ShenzhenHospital();
        shenzhenHospital.goToHospital();
    }
}

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值