【设计模式系列4】详解模板方法模式,java高级课程设计代码

模板方法模式是一种行为设计模式,定义了算法的骨架并允许子类在不改变结构的情况下重定义特定步骤。文中通过炒菜的例子展示了如何使用模板方法模式,包括放油、放蔬菜、翻炒等步骤,并允许子类自定义放佐料的行为。此外,还介绍了钩子方法的概念,用于流程的微调。最后,给出了一个烹饪白菜的子类实现和测试案例。
摘要由CSDN通过智能技术生成

| 命令模式 | 登机入口 |

| 访问者模式 | 登机入口 |

| 软件设计7大原则和设计模式总结 | 登机入口 |

什么是模板方法模式

======================================================================

模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为行设计模式。

模板方法模式示例

=====================================================================

举个简单的炒蔬菜的例子,我们把炒菜拆分为以下几个步骤:

  1. 放油

  2. 放入蔬菜

  3. 翻炒

  4. 放盐

  5. 放点其他佐料

  6. 出锅

接下来我们就以这个例子来写一个模板方法模式的示例

1、创建一个烹饪蔬菜类(模板模式一般用抽象类来定步骤)


package com.zwx.design.pattern.templete;

public abstract class CookingVegetables {

protected final void cooking(){

//1.放油

this.putOil();

//2.放入蔬菜

this.putVegetables();

//3.翻炒

this.stirFry();

//4.放点盐

this.putSalt();

//5.放入佐料,如果没有就直接起锅了

if (this.needSeasoning()){

this.putSeasoning();

}

//6.起锅

this.dishUp();

}

//放油

final void putOil(){

System.out.println(“油下锅了。。。”);

}

//放入蔬菜

final void putVegetables(){

System.out.println(“菜下锅了。。。”);

}

//翻炒

final void stirFry(){

System.out.println(“正在翻炒。。。”);

}

//放点盐

final void putSalt(){

System.out.println(“放点盐。。。”);

}

//放入其他佐料

abstract void putSeasoning();

//是否需要佐料,这个是钩子方法,用于流程微调

protected boolean needSeasoning(){

return true;

}

//起锅

final void dishUp(){

System.out.println(“菜炒好了,可以起锅了”);

}

}

上面这个类中每个步骤都定义了一个方法,但是否是final类型,不允许被继承修改,只有一个步骤:【加入佐料】是抽象的,需要子类去自定义实现,还有一个特别的方法:needSeasoning(),这是一个钩子方法,那么什么是钩子方法呢?

钩子方法的主要目的是用来干预执行流程,使得我们控制行为流程更加灵活,更符合实际业 务的需求。钩子方法的返回值一般为适合条件分支语句的返回值(如 boolean、int 等)钩子方法不是必须的,可以根据实际业务场景确认是否需要

2、创建一个烹饪白菜类继承上面的抽象类


package com.zwx.design.pattern.templete;

public class CookingCabbage extends CookingVegetables {

@Override

void putSeasoning() {

System.out.println(“放点姜。。。”);

}

}

这个类主要就是实现抽象类中的抽象方法,去自定义实现某一个步骤

3、最后我们可以创建一个测试类类运行一下


package com.zwx.design.pattern.temp

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

lete;

public class CookingTest {

public static void main(String[] args) {

CookingVegetables cookingVegetables = new CookingCabbage();

cookingVegetables.cooking();

}

}

4、运行结果如下


在这里插入图片描述

模板方法模式相对来说是一个比较简单的设计模式,通过这样一个简单的案例,相信大家对模板方法模式会有一个基本的印象

模板方法模式应用场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值