一、练习题

1. 某系统支持多种数据源和多种图标显示的方式,但所有的图标显示操作都基于XML格式的数据,因此可能需要对数据进行转换,如果从数据源获取的数据已经是XML格式,则无需转换,使用模板方法模式模拟这一操作。

类图

核心代码

package DesignPattern.template

public abstract class DataTemplate {
    // 模板方法,定义算法骨架
    public func displayChart(flag: Bool) {
        let data = fetchData()
        let xmlData = convertXml(data, flag)
        renderChart(xmlData)
    }
    
    protected func fetchData(): String

    protected func convertXml(data: String, flag: Bool) {
        if (flag) {
            return data
        }
        return doConvertXml(data)
    }
    
    protected func doConvertXml(data: String): String
    
    protected func renderChart(xmlData: String) {
        println("使用XML数据渲染图表:");
        println(xmlData);
        println("渲染成功!");
    }
}

public class XmlDataSource <: DataTemplate {
    public XmlDataSource(let xmlData: String) {}
    
    protected override func fetchData() {
        println("获取XML数据...");
        return xmlData;
    }
    
    protected override func doConvertXml(data: String) {
        return "数据: ${data}已经是XML格式!"
    }
}

public class JsonDataSource <: DataTemplate {
    public JsonDataSource(let jsonData: String) {}
    
    protected override func fetchData() {
        println("获取JSON数据...");
        return jsonData;
    }

    protected override func doConvertXml(data: String) {
        return "已将JSON格式数据: \n${data}\n转换成XML格式"
    }
}

测试代码

package DesignPattern
import DesignPattern.template.*

main(): Int64 {
    let xmlSource = XmlDataSource("你好")
    xmlSource.displayChart(true)

    println()
    let jsonSource = JsonDataSource("hello")
    jsonSource.displayChart(false)
    return 0
}

二、小结

本章为大家详细的介绍了仓颉设计模式中模板方法模式练习题的内容,下一章,为大家带来状态模式的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐