模版办法形式
前言
模版办法形式,是行为型规划形式的一种。这个形式的使用频率没有那么高,以至于之前从来没有了解过该形式。不过兄弟们也不必怕,这个形式其实仍是比较简单的。等会咱们举个比如,来了解一下这个形式。
介绍
概念了解
模版办法形式,个人了解是,将类中的一些办法履行次序进行排序。其间的部分办法能够被重写。排序后的办法便是模版办法。排序后的类便是模版类。这种代码规划思路便是模版办法形式。
菜谱:猪脚面
上面的描绘或许有点笼统。那么咱就换一个讲法来说一下这个形式。
早年呢,在京海市有一条街叫旧厂街,那里呢有一个菜市场,菜市场里有一个卖鱼的小老板他叫高启强。他呢有一个弟弟妹妹。兄妹三人啊从小就喜欢吃猪脚面。可是因为家里穷,所以三人只够吃一碗面。妹妹高启兰吃猪脚,弟弟高启盛吃面,而高启强就只能喝面汤。
因为确实穷,他就去找饭馆老板要了一份菜谱。饭馆老板看他可怜就给了他一份猪脚面的菜谱,详细如下:
- 把水烧开
- 放面条
- 放猪脚
- 放佐料
- 把面煮熟
他兴高采烈的依照菜谱做了一份猪脚面,给弟弟妹妹吃。可是成果却让他失望了。因为猪脚面的滋味出了问题。
他去找了老板,老板对他说,阿强啊,我给你的菜谱肯定没问题,滋味不对一定是哪个环节出错了。
于是他又给老板做了一遍。当他放完佐料的时候。老板马上叫住了他,对他说。阿强,你其他的过程都没有错,可是放佐料这一步和我有些不一样。
这一步这儿你应该要放的是酱油和老抽,再用盐和鸡精调味。可这儿你只用了醋来调味,所以滋味不对。高启强满脸通红的对老板说,对不起啊老板,我家太穷类没有那些调度所以只能用醋代替了。
在上面这个比如中,这儿面的菜谱便是模板也能够说是结构。 菜谱的履行次序能够被看作是模板办法。并且这儿的履行次序是固定无法被改动的。 履行次序无法改动,可是详细的做菜过程却是能够被重写的。比如说放佐料。
比如中的高启强正是因为这一步的不同,导致他做出的猪脚面和老板的口味不一致。
2023春晚
上面这个能够看作是模版办法形式的一个简单举例。接下来咱们再举个有代码的比如加深下对模版办法形式的形象。
春晚模版类
SpringFestivalGala规则了春晚有必要遵从的节目流程。这个代码中的start办法,能够看作是模版办法形式中最重要的一环,因为他便是规则了其他办法调用次序的模版办法。
- 开场白
- 唱歌
- 跳舞
- 小品
- 难忘今宵
因为不同卫视的节目次序都遵从这套模版。并且最终的节目难忘今宵是春晚保留节目,所以该节目有必要一切春晚保持一致,详细代码如下所示:
/**
* 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();
}
}
运转成果
成果如图所示
模版办法形式的模版
- 有一个固定的模版类A,它是一个笼统类
- 模版类A里有一些办法,这些办法里有需求子类重写的笼统办法
- 有一个模版办法,它里边有着这些办法的调用次序。这个次序是不能被改动的,也是模版办法形式的核心
- 子类继承模版类A,重写它的笼统办法
后记总结
至此,模版办法形式就算是介绍完毕了。仔细的小伙伴或许发现了,模版办法形式的模版假如要扩展的话,就有必要改了啊,他这违反了开闭原则啊。
没错,这是这个形式的一个缺陷。从模版办法形式的界说来看,它的概念便是给其他类供给一套固定的履行流程,这个履行流程便是模版办法。其他类只能修正其间的办法,不能修正履行流程,即不能修正模版办法。所以它从界说上就不存在修正履行流程这一或许。或许有点强行洗白,可是这也是一种解说方法。
仍是那句话,关于规划形式来说,没有固定的套路。究竟它仅仅人们经过长期总结出来的代码经验。所以千万别被所谓的规划形式结构所拘谨,只需符合要求,有利阅览和扩展便是好的代码。
假如喜欢请点个赞,支撑一下。有过错或不同想法请及时指正哈。辛苦您看到这儿,下篇文章再见哈,