模板模式

# 模板模式

有些方法,所有的子类实现的流程完全一致,只是流程中的某个步骤的具体实现不一致,可以将该方法提取到父类,在父类中完成整个流程的实现,遇到实现不一致的方法时,将该方法做成抽象方法。

abstract class Human {
    name: string = "";
    age: number = 0;

    move(x: number, y: number) {
        console.log("判断边界值是否出界"); // 1
        console.log("判断是否存在障碍物无法跨越"); // 2
        if (this.rule(x, y)) {
            console.log("移动成功");
        }
    }

    protected abstract rule(x: number, y: number): boolean;
}


class Man extends Human {
    name: string = "Tom";
    age: number = 1;

    protected rule(x: number, y: number): boolean {
        return true;
    }
}

class Woman extends Human {
    name: string = "Alisa";
    age: number = 1;

    protected rule(x: number, y: number): boolean {
        return false
    }
}


let m: Human = new Man()

m.move(1,1)

如上述代码中 move 方法。前两个判断是相同的,只需要判断移动是否合规即可。