设计模式之模板方法模式

1.模板方法模式

定义了一个算法的骨架,并允许子类为某些步骤提供具体的实现。这种模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。

2.模板方法模式的基本概念

1)AbstractClass(抽象类)

定义了一个模板方法,该方法包含了一些基本的操作(通常是抽象方法或钩子方法)。

提供了默认实现的一些基本操作。

2)ConcreteClass(具体类)

继承自 AbstractClass,并实现其中的抽象方法或钩子方法.

可以覆盖一些方法以提供不同的实现。

3.举个栗子:

例如:人的一周,周一到周五上班,周六周日可以做自己喜欢的事.对于工作和空闲时间;其他的相对固定,如吃饭,刷牙,睡觉,这些比较固定,可以通过abstract实现模板类,通过继承实现抽象方法,或钩子函数

4.代码实现:

1)抽象类

java 复制代码
package org.xiji.template;

/**
 *  人的一周抽象类
 */
public abstract class OnePersonWeek {

    /**
     * 一个人的一天
     */
    public void onePersonDay(){
        wakeUp();
        brushTeeth();
        eat();
        if(judgeDay()){
            goToWork();
            goHome();
        }else{
            System.out.println("今天不上班");
            doMyFavourThing();

        }
        sleep();

    }

    //起床
    public void wakeUp(){
        System.out.println("起床");
    }
    //刷牙
    public void brushTeeth(){
        System.out.println("刷 teeth");
    }
    //吃饭
    public void eat(){
        System.out.println("吃 food");
    }
    //上班
    public void goToWork(){
        System.out.println("上班");
    }
    //下班
    public void goHome(){
        System.out.println("下班");
    }
    //睡觉
    public void sleep(){
        System.out.println("睡觉");
    }


    //判断今天是星期几(这个是抽象钩子函数)
    public abstract boolean judgeDay();

    //可以做任何事(这个是抽象函数)
    public abstract void doMyFavourThing();

}

2)抽象类实现类

java 复制代码
package org.xiji.template;

/**
 * 模板方法实现类
 */
public class MyDay extends OnePersonWeek{
    //
    private int day=1;

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    /**
     *
     * 判断是否是周末
     */
    @Override
    public boolean judgeDay() {
        if (this.day == 0 || this.day == 6) {
            return false;
        }

        return true;
    }

    /**
     * 做自己喜欢的事情
     */
    @Override
    public void doMyFavourThing() {
        System.out.println("今天出去散步,心情愉悦");
    }
}

3)测试类

java 复制代码
package org.xiji.template;

/**
 * 模板模式
 */
public class TemplateMain  {

    public static void main(String[] args) {
        MyDay myDay = new MyDay();

        for (int i = 0; i < 7; i++) {
            System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            myDay.setDay(i);
            myDay.onePersonDay();
            System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");

        }
    }
}

4)运行结果

相关推荐
George_Ye30 分钟前
同一本书,一人一份:我如何设计 AI 个性化扫书报告
设计模式
莫得感情 o10 小时前
设计模式 22 · 三个冷门模式:中介者、访问者、解释器
java·设计模式
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AustinXu1 天前
从 Claude Code 到 Claude Tag,Harness Engineering 走到了组织这一层
设计模式·团队管理
剧中有戏1 天前
单例模式从入门到精通:一个数据库连接池的完整剖析
设计模式
胡萝卜术1 天前
编译期与运行期的双重防线:从 TypeScript 类型之争到 LLM 输出的自动化择优
前端·设计模式·面试
货拉拉技术1 天前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
KhalilRuan1 天前
设计模式小记
设计模式
卡牌RWA研究院1 天前
Relique:一张精品卡牌如何从收藏品变成可交易的链上资产?
设计模式·金融·区块链·创业创新
剧中有戏2 天前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式