大家好,我是洪爵,今天打开手机浏览网页,满满都是设计模式。
模板模式,是属于设计模式中的行为性模式,该类设计模式特别关注对象之间的通信。
很多时候我们会发现,在设计一个通用系统的时候,我们已经知晓或总结出整个SOP流程,确定了每一个步骤的执行顺序,但是具体的步骤实现还不清楚,因为会根据业务场景的不同,具体的实现也会不同,但是整个流程已经是确定下来的了。比如说你要出行,选择的交通工具是飞机,那么整个过程肯定包含有三个步骤,第一个是buy()买票,第二个是开始旅程,第三个是结束旅程。但是具体实现可能每个航空公司有所差异,比如说开始旅程中,不同航空公司可能会提供不一样的服务,每个飞机桌位的舒适度等等。
更形象的例子就是ppt,word文档这些了,这类规定了流程或者格式的实例定义成一个模板,允许使用者去按照自己的需求去更新它。
模板模式定义了操作中的算法骨架,而将具体实现放在了子类中,让子类在不改变该算法结构的前提下,去填充该算法的某些或全部步骤。
优点:封装了不变的部分,扩展可变的部分。符合开闭原则。便于后续的维护。
缺点:每个具体实现都要定义一个新的子类。
模式的结构:
抽象的模板类->负责给出算法的轮廓和骨架,由一个模板方法和若干个基本方法组成。
模板方法:定义了整个流程,按照某种顺序去调用若干个基本方法。
基本方法:抽象方法、具体方法、钩子方法。
抽象方法:在抽象模板类中声明,具体实现需要子类实现。
具体方法:在抽象类中已经实现,子类可以继承或者重写它。
钩子方法:在抽象类中已经实现,用于判断或者需要子类重写的空方法。
具体子类:继承抽象的模板类。
类图
具体代码实现:
public abstract class Game {
abstract void initialize();
abstract void start();
abstract void end();
public final void play() {
// 初始化游戏
initialize();
// 开始游戏
start();
// 游戏结束
end();
}
}
public class LOLGame extends Game {
@Override
void initialize() {
System.out.println("lol初始化中...");
}
@Override
void start() {
System.out.println("lol游戏开始");
}
@Override
void end() {
System.out.println("lol游戏结束");
}
}
public class Client {
public static void main(String[] args) {
Game game = new LOLGame();
game.play();
}
}
/*
lol初始化中...
lol游戏开始
lol游戏结束
*/
好啦,本章节模板模式就到这里啦!希望对你有所帮助!!!
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!