本文主要是介绍趣解设计模式之《怀念小时候玩的红白机嘛?》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
〇、小故事
不知道大家小时候都有什么难忘的经历。作为80后的我来说,小时候印象最深的就是任天堂生产的FC游戏机(俗称“红白机”),当时在家和小伙伴一起玩《魂斗罗
》、《超级马里奥
》、《冒险岛
》、《坦克大战
》等等游戏,经常从早上玩到天黑,然后作业都忘记写,被打屁股。
对于部分90后或者00后来说,红白机或许是比较陌生的。那这里我就说一下怎么去使用它玩游戏。具体步骤如下所示:
【步骤1】把
手柄
连接到FC游戏主机上;
【步骤2】把视频输出线
连接到FC游戏主机和电视上;
【步骤3】把电源适配器
连接到FC游戏主机和电源插口上;
【步骤4】把游戏卡带
插入到FC游戏主机上;
【步骤5】打开游戏开机
按钮,快乐的游戏时光开始了!!
那如果我们想要换个游戏怎么办呢?只需要换个游戏卡带就可以了,so easy~ 对于需求的变化(我不要玩《魂斗罗》我要玩《超级马里奥》
),我们不需要再重新执行一遍所有的5个步骤,只需要改变【步骤4】就可以了,那么这就是我们今天要介绍的——模版方法模式。
一、模式定义
模版方法(Template Method
)
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
为了便于大家对以上定义的理解,我们还是以玩FC游戏机为例,看一看哪些部分是“算法骨架”,哪些部分属于“延迟到子类实现”,具体请见下图所示:
二、模式类图
还是依照惯例,我们再举一个例子来理解一下这个设计模式。这个例子就是我们要制作一款饮品。那么,制作饮品的步骤我们暂且分为4个步骤:
【步骤1】把水煮沸;
【步骤2】制作饮品;
【步骤3】把制作好的饮品放入到杯子中;
【步骤4】往饮品中增加一些辅料;
那么,我们其实很容易的能够拆分出算法骨架——步骤1
和步骤3
,那么需要延迟到子类中实现的自然就是——步骤2
和步骤4
了,具体类图请见下图所示:
三、代码实现
我们创建模版方法抽象类:MakeBeverage.java
public abstract class MakeBeverage {// 准备食谱(防止子类覆盖这个方法)final void prepareRecipe() {/** 第一步:把水煮沸 */boilWater();/** 第二步:酿造饮品 */brew();/** 第三步:把饮品倒入杯子中 */pourInCup();/** 第四步:往饮品中增加调味品 */addCondiments();}// 制作饮品abstract void brew();// 往饮品中增加调味品abstract void addCondiments();protected void boilWater() {System.out.println("把水煮沸");}private void pourInCup() {System.out.println("把饮品倒入杯子中");}
}
创建模板方法的实现子类:Tea.java
public class Tea extends MakeBeverage {@Overrideprotected void brew() {System.out.println("用沸水浸泡茶叶");}@Overrideprotected void addCondiments() {System.out.println("往茶叶中添加柠檬");}
}
创建模板方法的实现子类:Coffee.java
public class Coffee extends MakeBeverage {@Overrideprotected void brew() {System.out.println("用沸水冲泡咖啡");}@Overrideprotected void addCondiments() {System.out.println("往咖啡中添加糖和牛奶");}
}
创建测试类:TemplateTest.java
public class TemplateTest {public static void main(String[] args) {System.out.println("-----------开始冲泡茶叶-----------");Tea tea = new Tea();tea.prepareRecipe();System.out.println("-----------开始冲泡咖啡-----------");Coffee coffee = new Coffee();coffee.prepareRecipe();}
}
运行结果:
-----------开始冲泡茶叶-----------
把水煮沸
用沸水浸泡茶叶
把饮品倒入杯子中
往茶叶中添加柠檬
-----------开始冲泡咖啡-----------
把水煮沸
用沸水冲泡咖啡
把饮品倒入杯子中
往咖啡中添加糖和牛奶
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」
这篇关于趣解设计模式之《怀念小时候玩的红白机嘛?》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!