13、模板模式

1、简介

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

简单点说就是说把一些公共的方法提取到抽象类中,并定义实现顺序,一些具体的细节则由子类实现。
在这里插入图片描述
使用场景
重要,复杂的方法,例如框架的骨架;有多个子类共有方法,且逻辑相同。

2、具体实现

//定义抽象方法,提取公共方法,并让具体的细节让子类实现
abstract class WorkTemplate{

    public final void  first(){
        System.out.println("起床");
    }

    public abstract void second();

    public final void last(){
        System.out.println("去公司工作");
    }

    public final void work(){
        first();
        second();
        if(isWorkDay()){
            last();
        }

    }

    protected  boolean isWorkDay(){
        return true;
    }

}

//正常工作日
class NormalWorker extends WorkTemplate{

    @Override
    public void second() {
        System.out.println("洗漱、吃早饭");
    }
}

//休息日
class RestDay extends WorkTemplate{


    //子类不同的实现
    @Override
    public void second() {
        System.out.println("躺下");
    }

    //覆盖父类方法
    @Override
    public boolean isWorkDay(){
        return false;
    }
}

public class Template {
    public static void main(String[] args) {

        System.out.println("========工作日==========");
        WorkTemplate normal = new NormalWorker();
        normal.work();

        System.out.println("========休息日==========");
        WorkTemplate rest = new RestDay();
        rest.work();
    }

}

这里,我利用工作日和休息日的区别来说明,由此可见,可以把人每天的行为抽象并按照一定的顺序放到抽象类中。而具体的行为可以在子类中实现,如果需要扩展,只需继承模板抽象类即可,当然这里只是举了一个简单的例子,到真正设计模板类的时候一定要考虑周全,后期这个模板类尽量必去更改。

3、总结

优点
(1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
(2)代码复用的基本技术,在数据库设计中尤为重要。
(3)存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。

不足
每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大。

作者在学习的时候,看到这一篇文章,写的十分细致,如果想要深入研究可参考:https://www.cnblogs.com/wangkaihua/p/9123171.html#autoid-3-4-0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值