设计模式之模板方法模式

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

相关推荐
星空寻流年2 分钟前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
蒋星熠1 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
至此流年莫相忘3 小时前
设计模式:策略模式
设计模式·策略模式
ytadpole5 小时前
揭秘设计模式:命令模式-告别混乱,打造优雅可扩展的代码
java·设计模式
努力也学不会java8 小时前
【设计模式】 外观模式
设计模式·外观模式
deepwater_zone9 小时前
设计模式(策略,观察者,单例,工厂方法)
设计模式
宁静致远202112 小时前
【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
c++·观察者模式·设计模式
User_芊芊君子15 小时前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
YA33318 小时前
java设计模式二、工厂
java·开发语言·设计模式
烛阴1 天前
【TS 设计模式完全指南】从零到一:掌握TypeScript建造者模式,让你的对象构建链式优雅
javascript·设计模式·typescript