jtandygod 2012-10-09 11:52 采纳率: 100%
浏览 240
已采纳

JAVA:关于模板模式

请教下模板模式
public abstract class Template { //抽象模板
protected abstract void eatBreakfast();

protected abstract void wash();

protected abstract void dressUP();

public final void morning() {
    System.out.println("---起床---");
    wash();
    dressUP();
    eatBreakfast();
    System.out.println("---去上班---");
}

}
public class DailyLifeA extends Template { //实现模板
public void eatBreakfast() {
System.out.println("喝牛奶");
}

public void wash() {
    System.out.println("洗澡");
}

public void dressUP() {
    System.out.println("穿正装");
}

}
public class Client{ //客户端

public static void main(String[] ags) {

    Template template;

    template = new DailyLifeA(); 
    template.morning();

    template = new DailyLifeB();
    template.morning();
}

}

输出结果:
---起床---
洗澡
穿正装
喝牛奶
---去上班---

这样是吧某些流程都封装起来等待子类来实现了 但是如果我的流程改变了 我的某个实现不想要eatBreakfast()这个步骤了,但是如果不实现这个的话程序还会报错该怎么办呢?网上搜了下说是用钩子调用控制流程-。-但还是么有理解呀

  • 写回答

1条回答 默认 最新

  • henghanan 2012-10-09 13:10
    关注

    钩子方法是可选择实现的逻辑,不是必须实现的。

    默认钩子方法:一个钩子方法常常由抽象类给出一个空实现作为此方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook”。

    命名规则:钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。

    按照你的需求,你的钩子方法应该这样来设计:
    public abstract class Template {
    protected abstract void doEatBreakfast() {}
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀