美文网首页
JavaScript中介者模式

JavaScript中介者模式

作者: 晓蟲QwQ | 来源:发表于2021-01-03 09:56 被阅读0次

当对象之间进行多对多引用时,进行开发,维护,阅读时将变得特别痛苦。在这些对象之间添加中间者,使它们都只与中介者,当中介者处理完一个对象的请求后,将结果通知于其他对象。

实现改动页面一处地方,其他地方做出相应变化

<body>

    选择颜色:   <select id="colorSelect">
                    <option value ="">请选择</option>
                    <option value ="red">红色</option>
                    <option value ="blue">蓝色</option>
                </select>
    
    选择内存:   <select id="memorySelect">
                    <option value ="">请选择</option>
                    <option value ="32G">32G</option>
                    <option value ="16G">16G</option>
                </select>
                
    输入购买数量: <input type="text" id="numberInput"/><br/>
    
    您选择了颜色: <div id="colorInfo"></div><br/>
    您选择了内存: <div id="memoryInfo"></div><br/>
    您选择了数量: <div id="numberInfo"></div><br/>
    
    <button id="nextBtn" disabled="true">请选择手机颜色和购买数量</button>
</body>
<script type="text/javascript">
    var colorSelect = document.getElementById('colorSelect'),
        numberInput = document.getElementById('numberInput'),
        colorInfo = document.getElementById('colorInfo'),
        numberInfo = document.getElementById('numberInfo'),
        memoryInfo = document.getElementById('memoryInfo'),
        nextBtn = document.getElementById('nextBtn');
    
    var goods = {
        "red|32G": 3,
        "red|16G": 0,
        "blue|32G": 1,
        "blue|16G": 6
    }
    
    //中介者
    var mediator = (function(){
        var colorSelect = document.getElementById('colorSelect'),
            numberInput = document.getElementById('numberInput'),
            colorInfo = document.getElementById('colorInfo'),
            numberInfo = document.getElementById('numberInfo'),
            memoryInfo = document.getElementById('memoryInfo'),
            nextBtn = document.getElementById('nextBtn');
            
        return {
            changed: function( obj ){
                var color = colorSelect.value,   //颜色
                    memory = memorySelect.value,  //内存
                    number = numberInput.value,  //数量
                    stock = goods[ color + '|' + memory ];   //颜色和内存对应的手机库存数量
                    
                if( obj === colorSelect ){
                    colorInfo.innerHTML = color;
                }else if( obj === memorySelect ){
                    memoryInfo.innerHTML = memory;
                }else if( obj === numberInput ){
                    numberInfo.innerHTML = number;
                }
                
                if(!color){
                    nextBtn.disabled = true;
                    nextBtn.innerHTML = '请选择手机颜色';
                    return;
                }
                
                if(!memory){
                    nextBtn.disabled = true;
                    nextBtn.innerHTML = '请选择内存大小';
                    return;
                }
                
                if( Number.isInteger( number - 0 ) && number > 0){ //输入购买数量是否为正整数
                    nextBtn.disabled = true;
                    nextBtn.innerHTML = '请输入正确的购买数量';
                    return;
                }
                
                nextBtn.disabled = false;
                nextBtn.innerHTML = '放入购物车';
            }
        }
    })();
    
    //事件函数
    colorSelect.onchange = function(){
        mediator.changed(this);
    };
    memorySelect.onchange = function(){
        mediator.changed( this );
    };
    numberInput.oninput = function(){
        mediator.changed( this );
    };
</script>

相关文章

网友评论

      本文标题:JavaScript中介者模式

      本文链接:https://www.haomeiwen.com/subject/hxpeoktx.html