模板模式

模板模式的核心是定义一个算法的骨架,把一些可能变化的实现延迟到子类中去。工厂方法可以看成是一种特殊的模板模式。

模板模式还与策略模式有点相似,但是他们的侧重点不同,模板模式的侧重点是规定算法模板,让别人按照他的意图去做事,策略模式的侧重点是定义一系列的方法簇,让使用者自己去选择。他们一个占据着主导权,一个交出了主导权

下面我们通过一个榨汁机的例子来看看模板模式是如何实现的

public abstract class Juicer {
    Boolean haveIngredients=true;
    public  final void prepareBeverages(){
        addFruit();
        juice();
        filter();
        if(haveIngredients)
            addIngredients();

    }
    //让子类去决定加什么水果
    public abstract void addFruit();

    public final void  juice(){
        System.out.println("正在榨汁");
    }

    public final void filter(){
        System.out.println("过滤");
    }
    //让子类去决定加什么调料
    public abstract void addIngredients();
    //定义了一个钩子,让用户决定是否加调料
    public void setHaveIngredients(Boolean haveIngredients){
        this.haveIngredients=haveIngredients;
    }
}

public class BananaJuicer extends Juicer{
    @Override
    public void addFruit() {
        System.out.println("加香蕉");
    }

    @Override
    public void addIngredients() {
        System.out.println("加冰加糖");
    }
}

public class AppleJuicer extends Juicer{
    @Override
    public void addFruit() {
        System.out.println("加苹果");
    }

    @Override
    public void addIngredients() {
        System.out.println("加冰");
    }
}

写个测试方法

public static void main(String[] args) {
        Juicer juicer1=new AppleJuicer();
        juicer1.prepareBeverages();

        System.out.println("--------------------------------");

        Juicer juicer2=new BananaJuicer();
        juicer2.haveIngredients=false;
        juicer2.prepareBeverages();
    }
    运行结果:
    加苹果
    正在榨汁
    过滤
    加冰
    --------------------------------
    加香蕉
    正在榨汁
    过滤

模板模式用钩子的模式可以去改变执行的过程,用final关键字修饰那些不可以修改的方法

模板模式是一种非常常见的模式,他在框架中应用的非常广泛,如果你的项目需要实现一些功能类似的代码,就可以用模板模式。

PS:源码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值