抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

模板方法模式:模板方法是封装算法流程,对某些细节,提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现

将基层的类算法框架搭起来,具体通过子类进行实现,例如学生日常的行为吃喝拉撒作为一个框架,具体的内容,怎么吃怎么喝交由子类处理

class Student{
    daily(){
        this.startUp();
        this.eatFood();
        this.study();
        this.sleep();
    }
    startUp(){
        throw Error("必须实例化老子!")
    }
    eatFood(){
        throw Error("必须实例化老子!")
    }
    study(){
        throw Error("必须实例化老子!")
    }
    sleep(){
        throw Error("必须实例化老子!")
    }
}

具体的自律的学生,实现吃喝拉撒:

class 自律的学生 extends Student{
    constructor(){
        super()
    }
    startUp(){
        console.log("六点起床")
    }
    eatFood(){
        console.log("六点半吃饭")
    }
    study(){
        console.log("七点学习")
    }
    sleep(){
        console.log("十点睡觉")
    }
}

放纵的学生实现:

class 放纵的学生 extends Student{
    constructor(){
        super()
    }
    startUp(){
        console.log("九点起床")
    }
    eatFood(){
        console.log("九点半同学带饭")
    }
    study(){
        console.log("从不学习")
    }
    sleep(){
        console.log("凌晨一点睡觉")
    }
}

调用继承来的daily方法:

const sunzehui = new 自律的学生()
sunzehui.daily()
console.log('-------------')
const mouren = new 放纵的学生()
mouren.daily()
/*
output:

六点起床
六点半吃饭
七点学习
十点睡觉
-------------
九点起床
九点半同学带饭
从不学习
凌晨一点睡觉

*/

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

**缺点:**每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

参考资料:

评论