说说模版模式

79 阅读2分钟

1.定义

模版模式(Template Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,将操作当中的某些步骤延迟到子类中去实现。模版模式通过在抽象类中定义一个模版方法,该方法包含了算法的主要步骤和执行顺序,而将其中某些具体的步骤留给子类去实现。不同的子类可以根据自身需求,去实现这些步骤,从而制定出符合特定业务逻辑的算法。

2.模版模式的结构

1.抽象类:抽象类中定义了模版方法,该方法包含了算法的基本骨架,也就是一系列固定的顺序步骤。抽象类中还定义了一些抽象方法,这些方法是留给子类去实现的,用于定制算法中的可变部分。除此之外,抽象类中还可以包含一些具体的方法,这些方法为算法提供了通用的视线。

2.具体子类:继承自抽象类,实现抽象类中定义的抽象方法,为模版方法中的可变步骤提供具体的实现。

3.代码示例

1.抽象类,到银行办理业务时,先取号,再排队,再办理业务,这个流程是不可变的,所以使用了final去修饰process方法,这样子类就不能去重写process这个模版方法了。

public abstract class AbstractBank {
    //流程(模版方法)
    public final void process() {
        //1、取号码
        this.register();
        //2、排队
        this.queue();
        //3、办理业务
        this.transact();
    }
    //取号码
    public int register() {
        int register = ((int) (Math.random()*10));
        return register;
    }
    //排队
    public void queue() {
        System.out.println("queue......");
    }
    //办理业务
    public abstract String  transact();
}

2.抽象类的具体实现类,可以有多个

public class Save extends AbstractBank{
    @Override
    public String transact() {
        return "这里写办理存钱业务的业务逻辑";
    }
}
public class WithdrawMoney extends AbstractBank{
    @Override
    public String transact() {
        return "这里写办理取钱业务的业务逻辑";
    }
}

3.客户端类,创建子类对象,调用父类里面的模版方法。

public class Client {
    public static void main(String[] args) {
        //办理存款
        Save save = new Save();
        save.process();
        
        //办理取款
        WithdrawMoney withdrawMoney = new WithdrawMoney();
        withdrawMoney.process();
    }
}

4.使用模版模式的注意事项

模版模式实现了代码复用,父类中的模版方法和已经实现的步骤会被子类继承,后面如果需要修改算法流程,只需要修改父类中的模版方法或者那些已经实现的步骤,子类就会继承这些修改。缺点就是每一个不同的实现都需要新增一个子类,导致类的数量增加。