设计模式之模板方法模式

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)运行结果

相关推荐
top_designer5 小时前
Substance 3D Stager:电商“虚拟摄影”工作流
人工智能·3d·设计模式·prompt·技术美术·教育电商·游戏美术
lapiii3586 小时前
[智能体设计模式] 第11章:目标设定与监控模式
人工智能·设计模式
在未来等你9 小时前
AI Agent设计模式 Day 7:Tree-of-Thoughts模式:树形思维探索
设计模式·llm·react·ai agent·plan-and-execute
烤麻辣烫10 小时前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则
g***B73810 小时前
前端组件设计模式,复用与扩展
前端·设计模式
桦说编程11 小时前
如果让我从头再来学习并发编程
java·设计模式·性能优化
明洞日记12 小时前
【设计模式手册006】建造者模式 - 复杂对象的优雅构建之道
java·设计模式·建造者模式
ZHE|张恒13 小时前
设计模式(二)工厂方法模式 — 把创建权限下放给子类,像“可扩展的生产线”
java·开发语言·设计模式
明洞日记14 小时前
【设计模式手册008】适配器模式 - 让不兼容的接口协同工作
java·设计模式·适配器模式
乂爻yiyao17 小时前
设计模式思想——从单例模式说起
java·单例模式·设计模式