java设计模式之模板模式

模板模式:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板模式较为简单,将同公用方法抽取出来形成一个抽象类,不同方法提供方法在子类覆盖,使用的是继承。

public abstract class RereshBaverage {
    /**
     * 制备饮料的模板方法
     * 封装了所有子类共同遵守的算法骨架
     */
    public final void prepreBvergeTemplage(){
        //步骤一 将水煮沸
        boilWater();
        //步骤二 炮制饮料
        brew();
        //步骤三 将饮料倒入杯中
        pourInCup();
        //步骤四 加入调味料
        addCondiments();

    }

    /**
     * 基本方法,将水煮沸 这对所有子类而言是一个共同的行为,所以声明为private,无需向子类开放
     */
    private void boilWater(){
        System.out.println("将水煮沸");
    }

    /**
     * 抽象的基本方法 泡制饮料
     * 在算法框架中并不知道具体实现是什么样子的,所以做成了抽象方法,并且由于我们需要在子类中可见,便于复写而提供具体的实现所以将
     * 权限设置为protected
     */
    protected abstract void brew();

    private void pourInCup(){
        System.out.println("将饮料倒入杯中");
    }

    /**
     * 加入调味料
     */
    protected abstract void addCondiments();}

子类实现咖啡

public class Coffee extends RereshBaverage {
    @Override
    protected void brew() {
        System.out.println("用沸水冲泡咖啡");
    }

    @Override
    protected void addCondiments() {
        System.out.println("加入糖和牛奶");
    }
}

子类实现茶

public class Tea extends RereshBaverage {
    @Override
    protected void brew() {
        System.out.println("用80 度的热水浸泡茶叶5分钟");
    }

    @Override
    protected void addCondiments() {
        System.out.println("加入柠檬");
    }
}

还可以加上钩子函数控制公共方法:
在这里插入图片描述
在这里插入图片描述
模板方法模式的适用场景:

(1)算法或操作遵循相似的逻辑

(2)重构时(把相同的代码提取到父类中)

(3)重要复杂的算法,核心算法设计为模板方法

模板方法模式的优点:1.封装性好 2.复用性好 3.屏蔽细节 4.便于维护

模板模式与策略模式有相似也有不同,个人觉得策略模式更抽象没有具体实现,模板模式部分抽象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值