锐单电子商城 , 一站式电子元器件采购平台!
免费注册

新人注册豪礼

interface、implement、extends、class、super区别

时间:2023-02-17 22:30:00 元器件资讯

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;
    }
}```

标签: dc24vege流量传感器

相关文章

极骚淫女