QML实现模板方法模式


什么是模板方法模式

模板方法模式:只需要使用集成就能实现。由两部分组成:抽象父类 + 具体的实现子类。

抽象父类:封装子类的算法框架,包括实现一些公用方法以及封装在子类中所有方法的执行顺序
实现子类:通过集成这个抽象类,也继承了整个算法,并且可以选择重写父类的方法
假如我们有许多平行的类,各个类之间有许多相同的行为,也有部分不同的行为。如果各位都定义自己所有的行为,那么会出现很多重复的方法。此时可以将相同的行为搬移到另外一个单一的地方,模板方法模式就是为了解决这个问题。在模板方法模式中,子类中相同的行为被移动到了父类中,而将不同的部分留待子类来实现。
总结来说就是,父类抽象出整个流程,固定了流程的走向,比如调用 A B C,按这个流程来,并可以默认实现这三个接口,而子类则可以选择实现其中的接口,从而在流程中根据子类实际情况,改变运行路径。
参考:javascript设计模式 之 8 模板方法模式

QML中如何实现模板方法?

第一步是,拆分父子类。
比如定义一个GroupItem的类,自定直接这样使用,那这就是一个父子类关系。

GroupItem {
   XXX
}

那么我们在父类的GroupItem中,如下实现:

Item {
    id: rootItem

    function init() {
        aaa()
        bbb()
        ccc()
    }

    function aaa() {
        console.log("warning: you should reimplement this function <aaa>")
    }

    function bbb() {
        console.log("warning: you should reimplement this function <bbb>")
    }

    function ccc() {
        console.log("warning: you should reimplement this function <ccc>")
    }
}

子类中则可以选择的去实现这三个中的一个或者多个。在外部调用init接口的时候,如果子类没有实现的接口,则会走入到父类的该接口中,否则进入到子类自己的对应的接口。即子类实现的接口覆盖了父类的同名接口。

Item {
    id: rootItem

    function bbb() {
        console.log("子类接口")
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值