ToB企服应用市场:ToB评测及商务社交产业平台

标题: Template Pattern —— Behavioral Class [打印本页]

作者: 立聪堂德州十三局店    时间: 2023-9-5 17:43
标题: Template Pattern —— Behavioral Class
Hook Method

钩子方法(Hook Method)之所以被称为“钩子”,是因为它在算法或流程中提供了一个“钩子”,允许子类在特定的点上“钩入”自己的实现逻辑,从而影响算法的行为或流程的执行。
它类似于一个挂钩、锚点,所以叫Hook method, 它允许子类插入自定义的代码来改变或扩展算法的功能。
Template pattern 的实现就必须用到Hook method。
Hook Method一般在抽象类中被定义,但默认情况下没有实现或者提供一个空实现。
钩子方法的作用是允许具体子类有选择地覆盖或扩展算法的某些步骤。
What is Template

模板模式(Template Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤推迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的特定步骤。
它提供了一种灵活的方式,允许子类定制算法的特定部分,同时保持整体的一致性。
Compare between Template and Builder

模板模式适用于具有相似算法结构但具体步骤有所不同的场景。它提供了一种灵活的方式,允许子类定制算法的特定部分,同时保持整体的一致性。
建造者模式适用于创建对象的构建过程比较复杂,需要一步一步地进行,并且需要创建不同表示的情况。
Key Elements

Simple Example

当你使用咖啡机制作咖啡时,可以使用模板模式来定义制作咖啡的算法骨架,同时允许子类来定制特定步骤的实现。
  1. // 模板类 - 制作咖啡的算法骨架
  2. public abstract class CoffeeMaker {
  3.     public void makeCoffee() {
  4.         boilWater();
  5.         brewCoffee();
  6.         pourInCup();
  7.         addMilkAndSugar();
  8.     }
  9.    
  10.     public void boilWater() {
  11.         System.out.println("Boiling water");
  12.     }
  13.    
  14.     // 抽象方法,由子类实现
  15.     public abstract void brewCoffee();
  16.    
  17.     public void pourInCup() {
  18.         System.out.println("Pouring coffee into cup");
  19.     }
  20.    
  21.     // 钩子方法,子类可以选择性实现
  22.     public void addMilkAndSugar() {
  23.         // 默认不加牛奶和糖
  24.     }
  25. }
  26. // 具体类 - 制作黑咖啡
  27. public class BlackCoffeeMaker extends CoffeeMaker {
  28.     @Override
  29.     public void brewCoffee() {
  30.         System.out.println("Brewing black coffee");
  31.     }
  32. }
  33. // 具体类 - 制作拿铁咖啡
  34. public class LatteCoffeeMaker extends CoffeeMaker {
  35.     @Override
  36.     public void brewCoffee() {
  37.         System.out.println("Brewing espresso");
  38.     }
  39.    
  40.     @Override
  41.     public void addMilkAndSugar() {
  42.         System.out.println("Adding milk and sugar");
  43.     }
  44. }
  45. // 客户端代码
  46. public class Client {
  47.     public static void main(String[] args) {
  48.         CoffeeMaker blackCoffeeMaker = new BlackCoffeeMaker();
  49.         blackCoffeeMaker.makeCoffee();
  50.         
  51.         System.out.println("--------------------");
  52.         
  53.         CoffeeMaker latteCoffeeMaker = new LatteCoffeeMaker();
  54.         latteCoffeeMaker.makeCoffee();
  55.     }
  56. }
复制代码
在上述示例中,CoffeeMaker 是一个抽象类,定义了制作咖啡的算法骨架。它包含了一系列的步骤:
其中:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4