js设计模式总结3

前端开发 作者: 2024-08-25 21:55:01
1、模板方法模式 模板方法就是将多个模型抽象化归一,从中取出一个最基本的模板,当然这个模板可以作为实体对象也可以作为抽象对象,看你具体需求,其他模块只需要继承这个模块方法,也可以扩展这个方法。 举例子
var Observer=(function(){
        //防止消息队列爆满而被篡改故将消息容器作为静态私有变量保存
        var _messages={};
        return {
            注册信息接口,是将订阅者注册的消息推入到消息对列中
            regist:(type,fn){
                if(typeof _messages[type]==='undefined'){
                    _messages[type]=[fn];
                }else{
                    将动作方法推入该消息对应的动作执行序列中
                    _messages[type].push(fn);
                }
            },发布消息接口
            fire:如果消息没有被注册,则返回
                if(!_messages[type])
                ;
                var events={
                    type:type,args:args||{}
                },i=0,len=_messages[type].length;
                for(;i<len;i++){
                    依次执行注册的消息对应动作序列
                    _messages[type][i].call(this移除消息接口
            remove:if(_messages[type] instanceof Array){
                    var i=_messages[type].length-1;
                    for(;i>=0;i--){
                        如果存在该动作,则移除该动作
                        _messages[type][i]===fn && _messages[type].splice(i,1);
                    }
                }
            }
        }
    })();
        var Result=(){
            判断结果保存在内部状态中
            var States={
                每种状态作为一种独立的方法保存
                state0:(){},state1:(){}
            }
            获取某一种状态并执行其对应的方法
             show(result){
                States["state"+result]  && States["state"+result]();
            }
             {
                返回调用转态方法接口
                show:show
            }
            
        }();        
var MarryState=每种状态作为一种独立的方法保存
                move:(){}
            }
        };
            
        var Action={
            changeState:(){
                组合通过传递多个参数进行实现
                var arg=arguments;
                重置内部状态
                _currentState={};
                如果有动作则添加动作
                if(arg.length){
                    遍历动作
                    for(var i=0,len=arg.length;i<len;i++向内部状态中添加动作
                        _currentState[arg[i]]=true;
                    }
                }
                方便链式调用
                return ;
            },goes:遍历内部保存的动作
                var i in _currentState){
                    动作存在则执行
                    States[i]&&States[i]();
                }
                ;
            }
                        change:Action.change,goes:Action.goes
            }
        };
    创建一个实例
    var marry=new MarryState();
    marry
        .change("jump","shoot")
        .goes()
        .goes()
        .change("shoot")
        .goes();
            var PriceState=内部算法对象
            {
                return30:(price){},return50:(price){}
            }
            策略算法调用接口
            (algorithm,price){
                如果算法存在,则调用算法
                return States[algorithm]&&States[algorithm](price)
            }
        };
var InputState={
                notNull:(value){},number: {
                check:);
                    return States[type]&&States[type](value);
                },addState:fn;
                }
            }
        };
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68619.html
js设计模式总结3