模板方法模式:只需要使用集成就能实现。由两部分组成:抽象父类 + 具体的实现子类。
抽象父类:封装子类的算法框架,包括实现一些公用方法以及封装在子类中所有方法的执行顺序
实现子类:通过集成这个抽象类,也继承了整个算法,并且可以选择重写父类的方法
假如我们有许多平行的类,各个类之间有许多相同的行为,也有部分不同的行为。如果各位都定义自己所有的行为,那么会出现很多重复的方法。此时可以将相同的行为搬移到另外一个单一的地方,模板方法模式就是为了解决这个问题。在模板方法模式中,子类中相同的行为被移动到了父类中,而将不同的部分留待子类来实现。
总结来说就是,父类抽象出整个流程,固定了流程的走向,比如调用 A B C,按这个流程来,并可以默认实现这三个接口,而子类则可以选择实现其中的接口,从而在流程中根据子类实际情况,改变运行路径。
参考:javascript设计模式 之 8 模板方法模式
第一步是,拆分父子类。
比如定义一个GroupItem的类,自定直接这样使用,那这就是一个父子类关系。
GroupItem {
XXX
}
那么我们在父类的GroupItem中,如下实现:
Item {
id: rootItem
function init() {
aaa()
bbb()
ccc()
}
function aaa() {
console.log("warning: you should reimplement this function ")
}
function bbb() {
console.log("warning: you should reimplement this function ")
}
function ccc() {
console.log("warning: you should reimplement this function ")
}
}
子类中则可以选择的去实现这三个中的一个或者多个。在外部调用init接口的时候,如果子类没有实现的接口,则会走入到父类的该接口中,否则进入到子类自己的对应的接口。即子类实现的接口覆盖了父类的同名接口。
Item {
id: rootItem
function bbb() {
console.log("子类接口")
}
}