浅谈钩子方法

        何为钩子方法

        钩子方法(Hook methods)是一种在面向对象编程中常用的设计模式,也被称为模板方法模式。在这种模式中,父类定义了一个算法的框架,并且将一些步骤的实现延迟到子类中。子类可以通过重写这些“钩子方法”来改变算法的行为,从而实现定制化。

        钩子方法通常是在父类中声明为虚方法或抽象方法,子类可以选择性地实现这些方法以定制算法的特定部分。父类中的算法框架会在适当的时机调用这些钩子方法,以完成整个算法的执行过程。

        通过使用钩子方法,我们可以实现算法的复用和定制化,同时保持算法的整体结构不变。这种模式有助于降低代码的重复性,提高代码的可维护性和扩展性。

        总的来说,钩子方法是一种让子类影响父类行为的技朧,通过在父类中留出可以被子类扩展的接口,实现算法的定制化和灵活性。

        通俗来说,我们将泡咖啡的制作过程定位一个算法框架,其具体的步骤有:1.烧开水 2.放入咖啡(什么类型的咖啡)或者是 茶叶  3.倒开水 4.加牛奶(可选) 然后在父类中可以实现一个方法,里面包括以上四个步骤,然后将这些步骤可以留给子类去选择重写,实现自定义,例如以下代码

        

abstract class Beverage {
    public void prepare() {
        boilWater();
        addSugarAndCoffee();
        pourInCup();
        addCondiments();
    }

    public void boilWater() {
        System.out.println("Boiling water");
    }

    public void pourInCup() {
        System.out.println("Pouring into cup");
    }

    // 钩子方法,子类可以选择是否重写
    abstract void addSugarAndCoffee();

    // 钩子方法,子类可以选择是否重写
    abstract void addCondiments();
}

class Coffee extends Beverage {
    @Override
    void addSugarAndCoffee() {
        System.out.println("Adding sugar and coffee powder");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding milk");
    }
}

class Tea extends Beverage {
    @Override
    void addSugarAndCoffee() {
        System.out.println("Adding sugar and tea leaves");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding lemon");
    }
}

public class Main {
    public static void main(String[] args) {
        Beverage coffee = new Coffee();
        Beverage tea = new Tea();

        System.out.println("Making coffee:");
        coffee.prepare();

        System.out.println("\nMaking tea:");
        tea.prepare();
    }
}

总结

        钩子方法(Hook Method)是一种由父类提供的空默认实现的方法,子类可以选择性地重写扩展该方法,以实现特定的行为或定制化逻辑。

        钩子方法可以在父类中被调用,以提供一种可插拔的方式来影响父类的行为。

         钩子方法通常用于框架或模板方法设计模式中。框架提供一个骨架或模板,其中包含一些已经实现的方法及预留的钩子方法。

        具体的子类可以通过重写钩子方法来插入定制逻辑,从而影响父类方法的实现方式。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值