战略形式-javascript

一个基于战略形式的顺序起码由两部份构成。
第一个部份是一组战略类,战略类封装了详细的算法,并担任详细的盘算历程。第二个部份是环境类Context,Context接收客户的要求,随后把要求托付给某一个战略类。

长处:

  • 战略形式应用组合、托付和多态等手艺和头脑,能够有效地防止多重前提挑选语句。

  • 战略形式供应了对开放—关闭准绳的圆满支撑,将算法封装在自力的strategy中,使得它们易于切换,易于明白,易于扩大。

  • 战略形式中的算法也能够复用在体系的其他地方,从而防止很多反复的复制粘贴事情。

  • 在战略形式中应用组合和托付来让Context具有实行算法的才,这也是继续的一种更轻巧的替换计划。

瑕玷:

  • 起首,运用战略形式会在顺序中增添很多战略类或许战略对象,但实际上这比把它们担任的逻辑堆砌在Context中要好。

  • 其次,要运用战略形式,必需相识一切的strategy,必需相识各个strategy之间的不同点,如许才挑选一个适宜的strategy。比方,我们要挑选一种适宜的旅游出行线路,必需先相识挑选飞机、火车、自行车等计划的细节。此时strategy要向客户暴露它的一切完成,这是违背起码学问准绳的。

战略模块:(环境类)

define(function () {
    'use strict';

    var Validator = function () { };

    Validator.prototype.selectValidator = function (validator) {
        this.validator = validator;//validator就是考证函数

        return this;  //this指向validator对象
    };

    Validator.prototype.validate = function (value) {
        if (this.validator) {
            return this.validator.validate(value);//this.validator考证函数
        }
        throw ('No validator selected');
    };

    return Validator;
});

邮箱考证模块(战略类)

define(function () {
    'use strict';

    return {
        validate: function (value) {
            return value.indexOf('@') !== -1;//简朴的邮箱考证
        }
    };
});

号码考证模块(战略类)

define(function () {
    'use strict';

    return {
        validate: function (value) {
            return (/^[0-9]{11}$/g).test(value);//能够严谨些
        }
    }
});

init模块

define(function (require) {
    'use strict';

    return {
        init: function () {

            var Strategy = require('strategy/strategy'),
                telValidator = require('strategy/telValidator'),
                emailValidator = require('strategy/emailValidator'),
                validator;

            validator = new Strategy();

            console.log(validator.selectValidator(telValidator).validate(012345678901));

            console.log(validator.selectValidator(emailValidator).validate('test'));
        }

    };

});
    原文作者:wee911
    原文地址: https://segmentfault.com/a/1190000004542092
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞