interface、implement、extends、class、super区别

interface接口:只声名成员方法,不做实现

implement实现:实现接口(接口可实现多个)

extends继承类:可重写父类的方法(类只能继承一个)

class类:声明并实现方法

super:调用父类的方法,引用父类的构造函数


export enum TaskEnum {
    ACCNPP,
    AVEFVC,
    QIMonthly,
    NPPSLOPE,
    FVCSLOPE,
    QISLOPE,
    BIOMASS,
    BIOMASSSLOPE
}
const TEND = ["上", "中", "下"];
export class TaskFactory {
    static getTask(initTask, taskEnum: TaskEnum): Task {
        switch (taskEnum) {
            case TaskEnum.ACCNPP:
                if (initTask) {
                    let task = initTask["ACCNPP"];
                    class ACCNPP extends BaseTask {
                        readonly task_type = TaskEnum.ACCNPP;
                        readonly title_add = task["title_add"];
                        readonly task_name = task["task_name"];
                        readonly task_url = task["task_url"];
                        public style_name = task["style_name"];
                    }
                    return new ACCNPP();
                }
                break;
        }

    }

export interface TaskParam {
    sy: string;
    ey: string;
    sm: string;
    em: string;
    reso?: string;
    type: string;
    asy?: string;
    aey?: string;
    remake?: string;
    forestType?: string;
    sat?: string
}

export interface Task {
    readonly task_type: TaskEnum;
    readonly title_add: string;
    readonly task_name: string;
    readonly task_url: string;
    style_name: string;
    taskParam: TaskParam;
    initTaskParam(year: number, syear: number, winter: boolean, sDate: Date, eDate: Date, reso: string, sat: string, type: string, asy: string, aey: string, forestType: string)
    analysisTaskParam(args: string)
    translateDate(winter?: boolean): string;
    translateType(): string;
    initProductRuleName(style?: number, coverage?: string, formatter?: string): string;
    getProductStartDate(dateStr: string, sIndex: number, eIndex: number): string;
    getTitle(): string;
    getStyle(style?: number): string;
    isTaskParamNull(): boolean;
    initGridInfoName(coverage?: string, formatter?: string, type?: string, argv?: string): string;
}

class BaseTask implements Task {
    readonly task_type: TaskEnum;
    readonly title_add: string;
    readonly task_name: string;
    readonly task_url: string;
    public style_name: string;
    private _taskParam: TaskParam;
    public set taskParam(taskParam: TaskParam) {
        this._taskParam = taskParam;
    }
    public get taskParam(): TaskParam {
        if (!this._taskParam) {
            throw new Error("taskParam is " + this._taskParam);
        }
        return this._taskParam;
    }
    
    getTitle(): string {
        try {
            return this.translateDate() + this.title;
        } catch (error) {
            return this.title;
        }
    }

    getStyle(): string {
        try {
            return this.style_name;
        } catch (error) {
            return this.style_name;
        }
    }

    isTaskParamNull(): boolean {
        try {
            return this.taskParam == null
        } catch (error) {
            return true;
        }
    }

    initTaskParam(sDate: Date, eDate: Date, reso: string,) {
        this.taskParam = {
            meteo_type: this.meteo_type,
            sy: sDate.getFullYear().toString(),
            ey: eDate.getFullYear().toString(),
            sm: (sDate.getMonth() + 1).toString().padStart(2, "0"),
            em: (eDate.getMonth() + 1).toString().padStart(2, "0"),
            vege_type: this.vege_type,
            type: this.type,
            // relevant: this.relevant == "QI-Monthly" ? "QI" : this.relevant,
            reso: reso
        }
        return this.taskParam;
    }

    analysisTaskParam(args: string) {
        /**
         * 标准参数格式:
         * meteo_type:   温度v12001   日照v14032  降水v13201  
         * type      :   1  统计        TAV,RRR,SSH
         * type      :   2  均值        AVETAV
         * type      :   4  趋势率      TAV-SLOPE
         * type      :   5  相关        TAV-RELE-NPP  TAV-RELE-FVC  TAV-RELE-QI
         * type      :   6  影响        TAV-EFCT-NPP
         */

        try {
            this.taskParam = null;
            if (!args) {
                console.warn("args is empty");
                return;
            }
            let taskParam: TaskParam = JSON.parse(args) as TaskParam;
            // console.log(taskParam)
            if (taskParam.meteo_type == this.meteo_type && taskParam.type == this.type && taskParam.vege_type == this.vege_type && taskParam.ey && taskParam.sy && taskParam.em.length == 2 && taskParam.sm.length == 2) {
                if (this.isYears == "false" && taskParam.sy != taskParam.ey) { return }
                if (this.isYears == "true" && taskParam.sy == taskParam.ey) { return }
                this.taskParam = taskParam;
                // console.log(this.taskParam);
            }
        } catch (error) {
            // console.warn(`JSON解译失败【${args}】`);
            return;
        }
    }

    translateType() {
        try {
            return this.title;
        } catch (error) {
            return;
        }
    }

    translateDate(): string {
        if (this.isYears == 'true') {
            return `${this.taskParam.sy}年-${this.taskParam.ey}${Number(this.taskParam.sm)}月-${Number(this.taskParam.em)}`;
        } else {
            return `${this.taskParam.sy}${Number(this.taskParam.sm)}月-${Number(this.taskParam.em)}`;
        }
    }

    initProductRuleName(coverage = "CHN", formatter = "img") {
        let year = Number(this.taskParam.ey)
        let eMonth = Number(this.taskParam.em)
        let dayCount = ((new Date(year, eMonth, 1).getTime() - new Date(year, eMonth - 1, 1).getTime()) / 24 / 3600 / 1000).toString().padStart(2, "0");
        let style = this.getStyle() == 'TAV' && this.taskParam.type == '2' ? 'AVETAV' : this.getStyle();
        return `Z_AGME_C_BABJ_${this.taskParam.ey}${this.taskParam.em.padStart(2, "0")}${dayCount}000000_P_CAGMSS_WCRMECO_SCOP-${style}-${this.taskParam.sy}${this.taskParam.sm.padStart(2, "0")}01000000_1KM_${coverage.toUpperCase()}_L88_PD_000_00.${formatter.toLowerCase()}`;
    }

    getProductStartDate(dateStr: string, sIndex: number, eIndex: number) {
        return dateStr.split("-")[dateStr.split("-").length - 1].substring(sIndex, eIndex);
    }
static getTask(initTask, taskEnum: TaskEnum): Task {
        switch (taskEnum) {
            case TaskEnum.ACCNPP:
                if (initTask) {
                    let task = initTask["ACCNPP"];
                    class ACCNPP extends BaseTask {
                        readonly task_type = TaskEnum.ACCNPP;
                        readonly title_add = task["title_add"];
                        readonly task_name = task["task_name"];
                        readonly task_url = task["task_url"];
                        public style_name = task["style_name"];
                    }
                    return new ACCNPP();
                }
                break;
            case TaskEnum.AVGQW:
                if (initTask) {
                    let task = initTask["AVGQW"];
                    return new AVGQW(task);
                }
                break;
        }
    }

class AVGQW extends BaseTask {
    readonly task_type = TaskEnum.AVGQW;
    readonly isYears: string;
    readonly title: string;
    readonly meteo_type: string;
    readonly type: string;
    readonly vege_type: string;
    readonly task_name: string;
    readonly task_url: string;
    public style_name: string;
    constructor(json) {
        super();
        this.isYears = json.isYears;
        this.title = json.title;
        this.meteo_type = json.meteo_type;
        this.type = json.type;
        this.vege_type = json.vege_type;
        this.task_name = json.task_name;
        this.task_url = json.task_url;
        this.style_name = json.style_name;
    }
}```

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值