模板方法模式

目录

1.核心思想

2.成员

看这里

3.优点

简单来说:定义一个大方向,子类可以修改一些逻辑,但是大框架是一致的。

4.代码实现

4.1 抽象类

4.2 子类实现

4.3 测试类


1.核心思想

定义一个算法的骨架,并将某些步骤的实现延迟到子类。

2.成员

抽象类Abstract Class:这是定义算法的骨架的类,包含一个或多个“模板方法”。模板方法是一个算法的整体步骤,其中一些步骤可能会调用子类的方法,允许子类在不改变算法结构的前提下提供具体的实现。

模板方法(Template Method):这是定义在抽象类中的方法,它包含算法的固定步骤顺序。这些步骤的某些实现是由抽象类提供的,而其他步骤则是由子类实现的。

具体方法(Concrete Method):这些方法在抽象类中实现,提供算法中的一些通用步骤。子类不能修改这些方法,但可以调用它们作为算法的一部分。

抽象方法(Abstract Method):这些方法在抽象类中定义,但不提供实现。子类必须实现这些方法,以提供具体的行为。

钩子方法(Hook Method):这些方法在抽象类中提供默认实现,子类可以选择重写这些方法以改变默认行为。钩子方法通常用于给子类提供额外的灵活性而不改变算法的总体结构。

看这里

模板方法:里面写框架大体流程。

具体方法:框架中默认要走的东西。

抽象方法:由子类继承重写,实现不同功能。

钩子方法:一种判断手段,在里面判断有没有权限,程序有没有问题,没有问题走后续逻辑。

3.优点

一致性:模板方法模式通过在抽象类中定义一个模板方法,确保了算法的结构和执行顺序的一致性。这种一致性对于复杂算法的实现尤为重要,因为它确保了算法的各个步骤按预期的顺序执行。

允许子类自定义:子类可以通过实现抽象方法或重写钩子方法来定制算法的特定步骤,而无需改变整体算法的结构。这种灵活性使得子类可以根据需求提供不同的实现。

复用具体方法:在模板方法模式中,抽象类中的具体方法可以被模板方法调用,提供了代码复用的机制。这样,公共的操作步骤可以在抽象类中实现,避免了重复代码。

隔离变化:模板方法模式将算法的变化封装在子类中,而固定部分由抽象类处理。这种封装减少了对算法固定部分的修改需求,同时使得算法的变化更加局限于子类的实现中,从而简化了维护工作。

减小对子类的影响:模板方法模式减少了子类对算法的整体结构的依赖。子类只需要关注如何实现具体的步骤,而不需要知道算法的其他部分如何工作。这有助于降低耦合,使得系统更加模块化。

易于理解和维护:通过将固定的步骤和变动的步骤分开,模板方法模式使得算法的实现更加清晰。开发者可以更容易地理解和维护代码,因为他们可以专注于变动的部分,而不必担心算法的整体结构。

一致的行为:由于模板方法定义了算法的步骤顺序,所有子类都遵循相同的步骤执行。这种一致性对于需要遵循固定流程的操作(如数据处理、报告生成等)特别有用。

集中控制:算法的固定部分集中在抽象类中管理,而子类只负责实现变动的部分。这种集中控制的方式使得扩展算法或增加新的功能变得更加简单和直观

简单来说:定义一个大方向,子类可以修改一些逻辑,但是大框架是一致的。

4.代码实现

4.1 抽象类

//抽象类
public abstract class TemplateMethod {
    //模板方法
    public final void templateMethod(){
        BeginTime();
        ApiMethod();
        EndTime();
    }
    //下面三个都是普通方法
    //具体方法
    public void BeginTime(){
        System.out.println("接口开始时间"+new Date());
    }

    public void EndTime(){
        System.out.println("接口结束时间"+new Date());
    }
    //抽象方法
    public abstract void ApiMethod();

    //钩子方法
    public Boolean delete(){
        System.out.println("转为逻辑删除");
        return true;
    }
}

4.2 子类实现

public class AddMethod extends TemplateMethod{
    @Override
    public void ApiMethod() {
        System.out.println("新增");
    }
}

public class DeleteMethod extends TemplateMethod{
    @Override
    public void ApiMethod() {
        if (super.delete()){
            SaveMethod saveMethod = new SaveMethod();
            saveMethod.ApiMethod();
            System.out.println("逻辑删除成功");
        }
    }
}

public class SaveMethod extends TemplateMethod{
    @Override
    public void ApiMethod() {
        System.out.println("更新操作");
    }
}

4.3 测试类

public class Test {
    public static void main(String[] args) {
        AddMethod addMethod = new AddMethod();
        addMethod.templateMethod();

        DeleteMethod deleteMethod = new DeleteMethod();
        deleteMethod.templateMethod();
    }
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值