[设计模式] 行为型:模版方法模式(Template Method Pattern)

什么是模版方法模式

现实生活中,模版到处都是,比如,小学生优秀作文模版,购房合同模版,还有生产各种甜品蛋糕的模具。

模版就是一套约定好的规则,套用模版就可以生产出符合规则的具体事物。

具体到编程领域的设计模式,模版就是抽象类的抽象方法。

因为抽象方法只有声明,没有实现,非常适合规则的描述,所以前人就利用抽象类的特性,摸索出了模版方法模式。

设计与实现

模版方法模式是一种非常容易掌握的模式,重点就是抽象类的抽象方法,用抽象方法描述规则逻辑,用抽象类的子类将规则具体化。

好了,不需要讲那么多,看看标准的模版代码就都能懂:

// 抽象类的模版方法
public abstract class Template {
    // 模版方法,封装统一的执行逻辑
    public void templateMethod() {
        method1();
        specific();
        method2();
    }

    private void method1(){
        System.out.println("首先,执行method1方法...");
    }

    private void method2(){
        System.out.println("最后,执行method2方法...");
    }

    // 需要子类实现的方法(具体规则)
    protected abstract void specific();
}

// 子类将规则具体化
public class Concrete extends Template {
    @Override
    protected void specific() {
        System.out.println("重写抽象方法,实现具体逻辑...");
    }
}

// 模式应用场景
public static void main(String[] args) {
    Template template = new Concrete();
    template.templateMethod();
}

抽象方法specific()protected修饰并非必须的,只是通常这样做会更好一些。

因为,抽象方法是拿给子类做具体实现的,一般无需暴露给外界,外界关注的是模版方法templateMethod(),而它又在抽象类中早就定义好了,不需要子类再去关注、重写。

抽象类中的method1()method2 ()都是用private修饰,这也是非必须的,只是针对本例来讲,这两个方法也无需暴露出去。

所以,无论有多少具体的子类,模版方法templateMethod()的运行逻辑都是固定不变的,子类也无需关心,这也就是模版方法模式的精髓之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值