前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模板模式

模板模式

作者头像
晚上没宵夜
发布2020-03-10 10:47:55
2710
发布2020-03-10 10:47:55
举报

1. 模板模式(Template Method)

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

简单来说:给出实现某件事的步骤顺序,这些顺序我们不能改变,我们只能改变步骤的内容。比如给出步骤顺序:1.动物先清洗 2. 动物吃食物 3. 动物去玩,其中(1,2,3)这些顺序不能改变,而具体清洗什么,吃什么。玩什么这些具体事情可以由子类重新定义

2. 实现

2.1 定义抽象模板类

代码语言:javascript
复制
public abstract class Template {
    
    // 非模板方法可抽象或是具体的
    abstract void clean();
    abstract void eat();
    abstract void play();
    
    // 模板方法修饰为final即不可重写,步骤规定不可变
    public final void templateMethod(){
        clean();
        eat();
        play();
    }
}

2.2 创建模板类的子类Dog

代码语言:javascript
复制
public class Dog extends Template {

    @Override
    void clean() {
        System.out.println("狗先洗脚");
    }

    @Override
    void eat() {
        System.out.println("狗然后吃肉");
    }

    @Override
    void play() {
        System.out.println("狗然后在家玩");
    }
}

2.3 创建模板类的子类Cat

代码语言:javascript
复制
public class Cat extends Template {

    @Override
    void clean() {
        System.out.println("猫先洗手");
    }

    @Override
    void eat() {
        System.out.println("猫然后吃鱼");
    }

    @Override
    void play() {
        System.out.println("猫最后出去玩");
    }
}

2.4 测试

代码语言:javascript
复制
public static void main(String[] args) {
        
    new Dog().templateMethod();
    System.out.println("----------人工分割线-----------");
    new Cat().templateMethod();

}
代码语言:javascript
复制
狗先洗脚
狗然后吃肉
狗最后在家玩
----------人工分割线-----------
猫先洗手
猫然后吃鱼
猫最后出去玩

2.5 总结

从上面的实现可以知道,我们可定义动物们的事件的内容,而这些事件的发生顺序是被规定好了,用了final修饰而不能重写该方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 模板模式(Template Method)
  • 2. 实现
    • 2.1 定义抽象模板类
      • 2.2 创建模板类的子类Dog
        • 2.3 创建模板类的子类Cat
          • 2.4 测试
            • 2.5 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档