中国农业建设网站,dw怎么把代码做成网页,东莞营销专业网站建设,qq旧版本大全官方下载一.概念
定义一个操作中的算法的骨架#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用了JAVA的继承机制#xff0c;在抽象类中定义一个模板方法#xff0c;该方法引用了若干个抽象方法#xff0…一.概念
定义一个操作中的算法的骨架而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用了JAVA的继承机制在抽象类中定义一个模板方法该方法引用了若干个抽象方法由子类实现或具体方法子类可以覆盖重写
其实就是JAVA的继承以及抽象方法、重写覆盖的使用
注意为防止恶意操作一般模板方法都加上 final 关键词
二.角色 AbstractClass抽象模板定义了一个模板方法和若干抽象方法和具体方法 ConcreteClass具体模板继承抽象模板类并实现抽象方法
三.优缺点
1.优点
封装不变部分扩展可变部分。提取公共代码便于维护。行为由父类控制子类实现。
2.缺点
每一个不同的实现都需要一个子类来实现导致类的个数增加使得系统更加庞大。
四.适用场景 多个子类有公有的方法,而且逻辑基本相同时. 重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能由各个子类实现. 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,庵后通过函数约束其行为。
五.模板模式实现
1.场景
我们将创建一个定义操作的 Game 抽象类其中模板方法设置为 final这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类它们重写了抽象类的方法。
TemplatePatternDemo我们的演示类使用 Game 来演示模板模式的用法。
2.创建一个抽象类
它的模板方法被设置为 final。
public abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();//模板public final void play(){//初始化游戏initialize();//开始游戏startPlay();//结束游戏endPlay();}
}
3.创建扩展的子类
Cricket 类
public class Cricket extends Game {Overridevoid endPlay() {System.out.println(Cricket Game Finished!);}Overridevoid initialize() {System.out.println(Cricket Game Initialized! Start playing.);}Overridevoid startPlay() {System.out.println(Cricket Game Started. Enjoy the game!);}
}
Football 类
public class Football extends Game {Overridevoid endPlay() {System.out.println(Football Game Finished!);}Overridevoid initialize() {System.out.println(Football Game Initialized! Start playing.);}Overridevoid startPlay() {System.out.println(Football Game Started. Enjoy the game!);}
}
4.测试
public class TemplatePatternDemo {public static void main(String[] args) {Game game new Cricket();game.play();System.out.println();game new Football();game.play(); }
}