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

设计模式~模板方法模式

作者头像
Vincent-yuan
发布2020-08-31 15:51:55
4530
发布2020-08-31 15:51:55
举报
文章被收录于专栏:Vincent-yuanVincent-yuan

模板方法模式是类的行为模式。

准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,

然后声明一些抽象方法迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,

从而对剩余的逻辑有不同的实现。这就是模板方法的用意。

模板方法模式的结构

这里涉及两个角色:

抽象模板角色(Abstract Template)由如下责任:

  • 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。
  • 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体的方法。

具体模板角色(Concrete Template)的责任:

  • 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
  • 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级路基的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

源代码:

抽象模板类

代码语言:javascript
复制
public abstract class AbstractClass {

    public void TemplateMethod(){
        //调用基本方法(由子类实现)
        doOperation1();
        doOperation2();
        doOperation3();
    }
    //基本方法的声明
    protected abstract void doOperation1();
    protected abstract void doOperation2();
    private final void doOperation3(){
        //do something
    }
}

具体模板类

代码语言:javascript
复制
public class ConcreteClass extends AbstractClass {

    @Override
    protected void doOperation1() {
        // TODO Auto-generated method stub
        System.out.println("doOperation1");
    }

    @Override
    protected void doOperation2() {
        // TODO Auto-generated method stub
        System.out.println("doOperation2");
    }
}

这个具体类实现了 父类声明的基本方法 - doOperation1()和doOperation2() ,而这两个基本方法所代表的就是强制子类实现的剩余逻辑。

好莱坞原则体现了模板模式的关键:

子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模板方法模式的结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档