设计模式学习二、模板方法模式

一、什么是模板方法模式

            模板设计方式:在一个方法中定义一个算法骨架,而将一些方法的实现放到子类中,这样使在不改变算法结构的情况下,重新定义算法中的一些步骤

                ps:什么是模板,简单点说就是一个方法,这个方法定义了一组算法步骤。任何步骤都可以是抽象的,这些抽象的方法由子类来实现。

二、使用场景

               多个类有共同的方法步骤,可以将这些共同的方法放在父类中,不同的实现设为抽象方法,由子类实现。

三、模式构成(网上扒的图,,)

                       

                 

四、举个例子

 

abstract  class Make{

    /*
    * 这是模板方法,里面定义了两个抽象的方法,
    * 这两个方法的实现可以在子类中完成,以此在不破坏算法框架代码
    * 结构的情况下,能完成任务
    * */
    public  void makeDrink(){
        boil();
        addMaterial();//具体的实现放在子类里
        addOther();具体的实现放在子类里
        close();
        hook();//这个等会解释
    }

    public void boil(){
        System.out.println("烧水~~~");
    }
    public abstract void addMaterial();
    public abstract  void addOther();
    public void close(){
        System.out.println("盖盖子~~~");
    }
    public void hook(){}
}
//对于抽象方法的具体实现
class  MakeCoffee extends Make{

    @Override
    public void addMaterial() {
        System.out.println("添加咖啡豆");
    }

    @Override
    public void addOther() {
        System.out.println("加点糖");
    }
}
//抽象方法的具体实现
class MakeTea extends Make{

    @Override
    public void addMaterial() {
        System.out.println("添加茶叶");
    }

    @Override
    public void addOther() {
        System.out.println("加点柠檬片");
    }
    //稍后解释,为了扩展功能
    @Override
    public void hook() {
        System.out.println("滤掉茶叶");
    }
}
public class Template1 {
    public  static  void main(String args[]){
        Make coffee=new MakeCoffee();
        Make tea=new MakeTea();
        coffee.makeDrink();
        tea.makeDrink();
    }
}
烧水~~~
添加咖啡豆
加点糖
盖盖子~~~
烧水~~~
添加茶叶
加点柠檬片
盖盖子~~~
滤掉茶叶

 

五、补充 

 

        1)为了防止模板方法被修改,可以将模板方法设置为final
        2)hook的作用:
                   hook为钩子,它在父类中实现,却没有任何内容,作用是为了方便扩展与补充,如果子类需要一些特定的行为,可以定义hook的内容,如果不需要,完全可以置之不理。
           ps:菜鸟一枚,如有不对请大佬指出,谢谢谢谢~~~~

 

转载于:https://www.cnblogs.com/GregZQ/p/8365283.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值