模板方法模式

定义

定义一个操作中的算法骨架,将算法中的一些步骤延伸到子类,使得子类可以不改变算法结构的情况下重新定义该算法的某些特定步骤

架构

模板:模板中定义抽象方法(子类重写)和基本方法(非抽象方法,子类可直接调用);
扩展

应用场景

1、算法整体步骤固定,其中个别容易改变的时候可以使用模板方法模式将容易改变的地方抽离,供子类实现;
2、当多个子类存在公共的行为的时候,可以将其提取出来并集中到一个公共父类中以避免代码重复,首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码;
3、当需要控制子类的扩展;

代码

在这里插入图片描述
Abstract

public abstract class Abstract {

    /**模板方法*/
    public void Template(){
        specificMethod();
        abstractMethod01();
        abstractMethod02();
        //子类通过控制hookMethod2的返回值可以控制父类的行为
        if (hookMethod2()){
            hookMethod1();
        }
    }

    /**具体方法*/
    public void specificMethod(){
        System.out.println("抽象类中已经实现的方法,子类可以继承和重写");
    }

    /**钩子方法*/
    public void hookMethod1(){}

    /**钩子方法*/
    public boolean hookMethod2(){
        return true;
    }

    /**抽象方法*/
    public abstract void abstractMethod01();

    /**抽象方法*/
    public abstract void abstractMethod02();

}

Children

public class Children extends Abstract{

    @Override
    public void abstractMethod01() {
        System.out.println("子类实现的抽象方法1");
    }

    @Override
    public void abstractMethod02() {
        System.out.println("子类实现的抽象方法2");
    }

}

Test

public class Test {

    public static void main(String[] args) {
        Abstract children = new Children();
        children.Template();
    }

}

总结

在抽象类中定义方法执行逻辑,可以通过固定条件控制特定方法的执行与否,子类重写抽象类中的方法(添加实际逻辑),最后直接通过调用抽象类中的模板方法来实现逻辑;

自我感觉完全可以在实体类中定义方法执行的顺序和逻辑,直接通过实体类来实现,这个方法的好处可能就是在对象多了之后便于管理了吧。

posted @   有锦  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示