• QML中的模板方法模式



    什么是模板方法模式

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

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

    QML中如何实现模板方法?

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

    GroupItem {
       XXX
    }
    
    • 1
    • 2
    • 3

    那么我们在父类的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 ")
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    Item {
        id: rootItem
    
        function bbb() {
            console.log("子类接口")
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Offset偏移分页Keyset键集分页(基于查找的分页)
    BSV 上的点对点结算衍生品:远期合约
    【目标检测】30、
    利用正则表达式进行数据采集和处理
    Qt全局定义
    求数组最大连续子数组乘积(轮询)
    js--事件循环机制
    Linux快速上手5:常用命令之帮助命令
    wxdown 公众号离线文章保存(GO语言开发)
    编写虚拟UART驱动程序-框架
  • 原文地址:https://blog.csdn.net/tanxuan231/article/details/126649933