模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,将算法中不变的部分封装在一个方法中,而将可变的部分留给子类来实现。通过模板方法模式,可以在不改变算法结构的情况下,允许子类重新定义算法中的某些步骤。

 

在模板方法模式中,主要有以下几个角色:

 

1. AbstractClass(抽象类):定义了一个模板方法,用于定义算法的骨架,其中包含了算法中的各个步骤,有些步骤可以是抽象的,由子类实现。

 

2. ConcreteClass(具体类):实现了抽象类中的抽象方法,完成算法中的具体步骤。

 

下面是一个简单的Java示例,演示模板方法模式的实现:

 

// 抽象类

abstract class AbstractClass {

    // 模板方法,定义算法的骨架

    public void templateMethod() {

        step1();

        step2();

        step3();

    }

 

    // 抽象方法,由子类实现

    protected abstract void step1();

 

    // 具体方法,子类也可以选择是否覆盖

    protected void step2() {

        System.out.println("Step 2 (default implementation)");

    }

 

    // 抽象方法,由子类实现

    protected abstract void step3();

}

 

// 具体类A

class ConcreteClassA extends AbstractClass {

    @Override

    protected void step1() {

        System.out.println("ConcreteClassA: Step 1 implementation");

    }

 

    @Override

    protected void step3() {

        System.out.println("ConcreteClassA: Step 3 implementation");

    }

}

 

// 具体类B

class ConcreteClassB extends AbstractClass {

    @Override

    protected void step1() {

        System.out.println("ConcreteClassB: Step 1 implementation");

    }

 

    @Override

    protected void step3() {

        System.out.println("ConcreteClassB: Step 3 implementation");

    }

}

 

public class TemplateMethodPatternExample {

    public static void main(String[] args) {

        AbstractClass classA = new ConcreteClassA();

        classA.templateMethod();

 

        System.out.println();

 

        AbstractClass classB = new ConcreteClassB();

        classB.templateMethod();

    }

}

 

 

在这个例子中,模板方法模式通过定义抽象类(`AbstractClass`)和具体子类(`ConcreteClassA`和`ConcreteClassB`)来实现算法的骨架和具体步骤。抽象类中的`templateMethod()`定义了算法的整体结构,其中包含了三个步骤:`step1()`、`step2()`和`step3()`。具体子类可以选择性地实现或覆盖这些步骤,从而实现自己的算法逻辑。通过模板方法模式,可以实现算法的复用和灵活性,同时避免代码重复。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值