模版办法形式

前言

模版办法形式,是行为型规划形式的一种。这个形式的使用频率没有那么高,以至于之前从来没有了解过该形式。不过兄弟们也不必怕,这个形式其实仍是比较简单的。等会咱们举个比如,来了解一下这个形式。

介绍

概念了解

模版办法形式,个人了解是,将类中的一些办法履行次序进行排序。其间的部分办法能够被重写。排序后的办法便是模版办法。排序后的类便是模版类。这种代码规划思路便是模版办法形式

菜谱:猪脚面

上面的描绘或许有点笼统。那么咱就换一个讲法来说一下这个形式。

早年呢,在京海市有一条街叫旧厂街,那里呢有一个菜市场,菜市场里有一个卖鱼的小老板他叫高启强。他呢有一个弟弟妹妹。兄妹三人啊从小就喜欢吃猪脚面。可是因为家里穷,所以三人只够吃一碗面。妹妹高启兰吃猪脚,弟弟高启盛吃面,而高启强就只能喝面汤。

因为确实穷,他就去找饭馆老板要了一份菜谱。饭馆老板看他可怜就给了他一份猪脚面的菜谱,详细如下:

  1. 把水烧开
  2. 放面条
  3. 放猪脚
  4. 放佐料
  5. 把面煮熟

他兴高采烈的依照菜谱做了一份猪脚面,给弟弟妹妹吃。可是成果却让他失望了。因为猪脚面的滋味出了问题。

他去找了老板,老板对他说,阿强啊,我给你的菜谱肯定没问题,滋味不对一定是哪个环节出错了。

于是他又给老板做了一遍。当他放完佐料的时候。老板马上叫住了他,对他说。阿强,你其他的过程都没有错,可是放佐料这一步和我有些不一样。

这一步这儿你应该要放的是酱油和老抽,再用盐和鸡精调味。可这儿你只用了醋来调味,所以滋味不对。高启强满脸通红的对老板说,对不起啊老板,我家太穷类没有那些调度所以只能用醋代替了。

在上面这个比如中,这儿面的菜谱便是模板也能够说是结构菜谱履行次序能够被看作是模板办法。并且这儿的履行次序是固定无法被改动的。 履行次序无法改动,可是详细的做菜过程却是能够被重写的。比如说放佐料。

比如中的高启强正是因为这一步的不同,导致他做出的猪脚面和老板的口味不一致。

2023春晚

上面这个能够看作是模版办法形式的一个简单举例。接下来咱们再举个有代码的比如加深下对模版办法形式的形象。

春晚模版类

SpringFestivalGala规则了春晚有必要遵从的节目流程。这个代码中的start办法,能够看作是模版办法形式中最重要的一环,因为他便是规则了其他办法调用次序模版办法

  1. 开场白
  2. 唱歌
  3. 跳舞
  4. 小品
  5. 难忘今宵

因为不同卫视的节目次序都遵从这套模版。并且最终的节目难忘今宵是春晚保留节目,所以该节目有必要一切春晚保持一致,详细代码如下所示:

/**
 * Author(作者):jtl
 * Date(日期):2023/2/10 20:05
 * Detail(概况):春晚流程(春晚模版 )
 */
public abstract class SpringFestivalGala {
    public void start(){
        prologue();
        song();
        dance();
        comedySketch();
        unforgettableTonight();
    }
    //开场白
    public abstract void prologue();
    //歌曲节目
    public abstract void song();
    //小品节目
    public abstract void comedySketch();
    //舞蹈节目
    public abstract void dance();
    //难忘今宵
    private void unforgettableTonight(){
        System.out.println("结尾:难忘今宵");
    }
}

上面的代码中,不同的春晚,有着不同的小品舞蹈等节目,所以需求SpringFestivalGala的子类需求重写这几个办法。可是难忘今宵是一切春晚共同的节目。因此能够复用
start办法就能够看作是模版办法。它里边的节目履行次序固定的无法被改动。

辽视春晚

辽宁春晚继承了春晚的固定模版。详细代码如下:

/**
 * Author(作者):jtl
 * Date(日期):2023/2/10 20:42
 * Detail(概况):辽宁春晚
 */
public class SpringFestivalGalaOfLiaoning extends SpringFestivalGala{
    @Override
    public void prologue() {
        System.out.println("开场白:欢迎来到,2023年,辽宁卫视春晚现场");
    }
    @Override
    public void song() {
        System.out.println("歌曲:孙楠,谭维维-追光");
    }
    @Override
    public void comedySketch() {
        System.out.println("小品:宋小宝-杨树林:十分营销");
    }
    @Override
    public void dance() {
        System.out.println("舞蹈:舞蹈-欢庆中国年");
    }
}

央视春晚

央视春晚相同遵从春晚的传统模版。有着开场白,歌曲等精彩的表演。尤其是小品初见照相馆一经播出,一己之力推动年轻人的离婚率,简直是本年节目之最!
央视春晚的详细代码如下:

/**
 * Author(作者):jtl
 * Date(日期):2023/2/10 20:53
 * Detail(概况):CCTV 央视春晚
 */
public class CCTVSpringFestivalGala extends SpringFestivalGala{
    @Override
    public void prologue() {
        System.out.println("开场白:欢迎来到,2023年,央视春晚的现场");
    }
    @Override
    public void song() {
        System.out.println("歌曲:邓超-好运全都来");
    }
    @Override
    public void comedySketch() {
        System.out.println("小品:于震-初见照相馆");
    }
    @Override
    public void dance() {
        System.out.println("舞蹈:辽宁芭蕾舞团:咱们的田野上");
    }
}

客户端代码

调用这两个类的客户端代码

/**
 * Author(作者):jtl
 * Date(日期):2023/2/10 20:04
 * Detail(概况):模版办法形式客户端
 */
public class Client {
    public static void main(String[] args) {
        CCTVSpringFestivalGala cctv = new CCTVSpringFestivalGala();
        cctv.start();
        System.out.println("----------------分割线----------------");
        SpringFestivalGalaOfLiaoning liaoning = new SpringFestivalGalaOfLiaoning();
        liaoning.start();
    }
}

运转成果

成果如图所示

用做猪脚面的方式,学习下模版方法模式

模版办法形式的模版

  1. 有一个固定的模版类A,它是一个笼统类
  2. 模版类A里有一些办法,这些办法里有需求子类重写的笼统办法
  3. 有一个模版办法,它里边有着这些办法的调用次序。这个次序是不能被改动的,也是模版办法形式的核心
  4. 子类继承模版类A,重写它的笼统办法

后记总结

至此,模版办法形式就算是介绍完毕了。仔细的小伙伴或许发现了,模版办法形式的模版假如要扩展的话,就有必要改了啊,他这违反了开闭原则啊。

没错,这是这个形式的一个缺陷。从模版办法形式的界说来看,它的概念便是给其他类供给一套固定的履行流程,这个履行流程便是模版办法。其他类只能修正其间的办法,不能修正履行流程,即不能修正模版办法。所以它从界说上就不存在修正履行流程这一或许。或许有点强行洗白,可是这也是一种解说方法。

仍是那句话,关于规划形式来说,没有固定的套路。究竟它仅仅人们经过长期总结出来的代码经验。所以千万别被所谓的规划形式结构所拘谨,只需符合要求,有利阅览扩展便是好的代码。

假如喜欢请点个赞,支撑一下。有过错或不同想法请及时指正哈。辛苦您看到这儿,下篇文章再见哈,