设计模式的学习(八):模板模式 红太狼 2020-11-13 19:31 529阅读 0赞 ## 模板模式 ## **1、模板模式**(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 **2、例子** 模版模式在现实时间中也有很多例子,比如:在生产电脑的时候,主板、声卡、显卡、网卡等,这些都是不可或缺的,但是可能机箱等不一样。在开发中,大家也会把一些公共代码,提取出来,这就是模版模式的一种应用。 **3、代理模式的优缺点** **优点:** 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。 **缺点:** 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。 **4、代码** public class EntryptTest { public static void main(String[] args) throws Exception { Game cricket = new Cricket(); cricket.play(); Game football = new Football(); football.play(); } } //创建一个游戏的抽象类,游戏的初始化、开始和结束都是必要的, 只是每种具体的游戏可能不一样! 它的模板方法被设置为 final。 abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); //模板 public final void play() { //初始化 initialize(); //开始 startPlay(); //结束 endPlay(); } } //具体的游戏来实现他 class Cricket extends Game { @Override void initialize() { System.out.println(" Cricket game Initialized!"); } @Override void startPlay() { System.out.println(" Cricket game start!"); } @Override void endPlay() { System.out.println(" Cricket game Finish!"); } } class Football extends Game { @Override void initialize() { System.out.println("Football game initialize!"); } @Override void startPlay() { System.out.println("Football game start!"); } @Override void endPlay() { System.out.println("Football game Finish!"); } } **运行结果:** Cricket game Initialized! Cricket game start! Cricket game Finish! Football game initialize! Football game start! Football game Finish! **分析:** 我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。 main方法中我们的演示类使用 Game 来演示模板模式的用法。 ![在这里插入图片描述][2018122514552075] [2018122514552075]: /images/1605295895592.png
还没有评论,来说两句吧...