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