10模板方法模式--javascript

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23876873/article/details/89088053

定义:定义一个算法框架,将一些实现的步骤延迟到子类中,在不改变算法的情况下,可从新定义算法的步骤。

IGame.js

export default class IGame{
    constructor(){

    }
    login(){this.Overriding()};
    stop(){this.Overriding()};
    play(){this.Overriding()};

    star(){
        this.login();
        this.play();
        this.stop();
    };
    Overriding(){throw Error("IGame需要实现")}
}

 star()方法写在IGame中:如果star()写在每个子类中,方法中的代码一样,也是必须一样的,因为这是一个固定的操作逻辑。

                                         如果不一样了,则会发生错误,不可控。

                                         如果一样了,这段代码逻辑发生改变(修复bug),则全部子类中都要修改,不利于修改。

DotaGame.js

import IGame from './IGame'
export default class DotaGame extends IGame{
    constructor(){
        super();
    }
    login(){console.log("dota login")};
    stop(){console.log("dota stop")};
    play(){console.log("dota play")};
}

LOLGame.js

import IGame from './IGame'
export default class LOLGame extends IGame{
    constructor(){
        super();
    }
    login(){this.loginWeGame();console.log("LOL login");};
    loginWeGame(){console.log("wegame login")}

    stop(){console.log("LOL stop");this.stopWeGame()};
    stopWeGame(){console.log("wegame stop")}
    play(){console.log("LOL play")};
}

client.js

import DotaGame from './DotaGame.js'
import LOLGame from './LOLGame.js'

console.log(DotaGame);
let dota = new DotaGame();
dota.star();

let lol = new LOLGame();
lol.star();

结果:

扫描二维码关注公众号,回复: 5824357 查看本文章

对于高层的client模块而言,他只需要知道模板方法star。

IGame只需知道login、stop、play;具体情况,子类视情况具体实现。

猜你喜欢

转载自blog.csdn.net/qq_23876873/article/details/89088053