设计模式-模板方法模式

设计模式-模板方法模式

本文我们简单说下设计模式中的观察者模式。

概述

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

优缺点

优点

  1. 把通用的不变方法提取到超类,降低子类冗余的代码
  2. 行为由父类控制,具体实和算法的具体细节现由子类实现
  3. 遵循开闭原则,可扩展

缺点

  1. 不同的实现就要新增一个实现类,子类实现会越来越多。

应用场景

  1. 多个子类有相同的方法,且逻辑实现相同
  2. 重要的,复杂的方法,可以设计成模板方法。

结构图

模式的结构

模板方法模式的主要角色如下。

在这里插入图片描述

代码实现

talk is cheap show me the code。废话少说,直接上代码。

  1. 模板抽象类
/**
 * @author itender
 * @date 2022/6/27 16:34
 * @desc 工作一天的抽象类
 */
public abstract class WorkerOneDay {

    public final void myOneDay() {

        // 起床
        getUp();

        // 吃早饭
        eatBreakfast();

        // 工作
        doWork();

        // 下班回家
        home();
    }

    /**
     * 起床
     */
    public abstract void getUp();

    /**
     * 吃早饭
     */
    public abstract void eatBreakfast();

    /**
     * 写代码
     */
    public abstract void doWork();

    /**
     * 下班回家
     */
    public abstract void home();
}
  1. 模板子类1
/**
 * @author itender
 * @date 2022/6/29 18:02
 * @desc itender一天的工作
 */
public class ItenderWorkOneDay extends WorkerOneDay {

    @Override
    public void getUp() {
        System.out.println("itender 起床了!");
    }

    @Override
    public void eatBreakfast() {
        System.out.println("itender 吃早饭了!");
    }

    @Override
    public void doWork() {
        System.out.println("itender 努力工作,加班写代码!");
    }

    @Override
    public void home() {
        System.out.println("itender 提交完代码下班回家!");
    }
}

  1. 模板子类2
/**
 * @author itender
 * @date 2022/6/29 18:06
 * @desc 测试工作一天
 */
public class TesterWorkOneDay extends WorkerOneDay {
    @Override
    public void getUp() {
        System.out.println("测试 起床了!");
    }

    @Override
    public void eatBreakfast() {
        System.out.println("测试 吃早饭!");
    }

    @Override
    public void doWork() {
        System.out.println("测试 开始测试Itender写的代码!");
    }

    @Override
    public void home() {
        System.out.println("测试 测试完Itender的代码,提完Bug下班回家!");
    }
}

测试代码

/**
 * @author itender
 * @date 2022/6/29 18:02
 * @desc 模板方法模式测试代码
 */
public class TemplateTest {
    public static void main(String[] args) {
        // 我的一天
        WorkerOneDay itenderWorkOneDay = new ItenderWorkOneDay();
        itenderWorkOneDay.myOneDay();

        // 测试人员的一天
        WorkerOneDay testerWorkOneDay = new TesterWorkOneDay();
        testerWorkOneDay.myOneDay();

        ItenderWorkOneDay itenderWorkOneDay1 = new ItenderWorkOneDay();
        itenderWorkOneDay1.myOneDay();
    }
}

输出

itender 起床了!
itender 吃早饭了!
itender 努力工作,加班写代码!
itender 提交完代码下班回家!
测试 起床了!
测试 吃早饭!
测试 开始测试Itender写的代码!
测试 测试完Itender的代码,提完Bug下班回家!
itender 起床了!
itender 吃早饭了!
itender 努力工作,加班写代码!
itender 提交完代码下班回家!

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值