学习 Ts 抽象类 实现模板模式

实现代码如下

// 模板模式: 在所有的类中,有一些处理逻辑完全相同,只有一部分的逻辑的不一致的,这样的话可以把逻辑完全相同的逻辑代码都在放在父中实现,只有那些不一样的逻辑处理放到子类中实现,
//不一样的逻辑可以做成抽象类让子类去实现 //
//例子如下: 象棋 棋子都有相同的规则 类似 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 所以没有移动成功
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容