实现代码如下
// 模板模式: 在所有的类中,有一些处理逻辑完全相同,只有一部分的逻辑的不一致的,这样的话可以把逻辑完全相同的逻辑代码都在放在父中实现,只有那些不一样的逻辑处理放到子类中实现,
//不一样的逻辑可以做成抽象类让子类去实现 //
//例子如下: 象棋 棋子都有相同的规则 类似 1.边界判断 相同 2.移动位置不能有已棋子 相同3.不同移动逻辑不同 4。移动函数 相同
abstract class Chess {
x: number = 0;
y: number = 0;
protected abstract name: string; //只读 + 抽象类
move(targetX: number, targetY: number) {
//下面子类也都有相同的判断逻辑 就可以抽离到父类实现
console.log('边界判断')
console.log('移动位置不能有已棋子')
if (this.rule(targetX, targetY)) {
this.x = targetX;
this.y = targetY;
console.log(this.name, '移动成功')
return true;
}
return false
}
protected abstract rule(targetX: number, targetY: number): boolean; //逻辑这个因为每个棋子都不同 他的子类的必须是要实现的这个是抽象类
//强制约束 子类要实现
}
// 1.棋子都有名字 2棋子都有如下规则 .边界判断 相同 2.移动位置不能有已棋子 相同3.不同移动逻辑不同 4。移动函数 相同
class Pao extends Chess {
protected rule(targetX: number, targetY: number): boolean { //只能在类中使用 外面访问不了
return false
}
protected name: string = '炮'
}
class Bin extends Chess {
protected rule(targetX: number, targetY: number): boolean {
return true
}
protected name: string = '兵'
}
class Ma extends Chess {
protected rule(targetX: number, targetY: number): boolean {
return false
}
protected name: string = '马'
}
let bin = new Bin();
bin.move(1,2) // console.log('边界判断')
// console.log('移动位置不能有已棋子') //false 所以没有移动成功