单例模式

描述: 保证一个特定类仅有一个实例。

var single = (function () {
    var unique;

    function getInstance() {
        // 如果该实例存在,则直接返回,否则就对其实例化
        if (unique === undefined) {
            unique = new Construct();
        }
        return unique;
    }

    function Construct() {
        // ... 生成单例的构造函数的代码
    }
    return {
        getInstance: getInstance
    }
})();

工厂模式

var XMLHttpFactory = function () {}; //这是一个简单工厂模式
XMLHttpFactory.createXMLHttp = function () {
    var XMLHttp = null;
    if (window.XMLHttpRequest) {
        XMLHttp = new XMLHttpRequest()
    } else if (window.ActiveXObject) {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP")
    }
    return XMLHttp;
}
//XMLHttpFactory.createXMLHttp()这个方法根据当前环境的具体情况返回一个XHR对象。
var AjaxHander = function () {
    var XMLHttp = XMLHttpFactory.createXMLHttp();
}

观察者模式( 发布订阅模式)

参考自定义事件

策略模式( 将算法的使用与算法的实现分离开来)

var strategies = {
    "S": function (salary) {
        return salary * 4;
    },
    "A": function (salary) {
        return salary * 3;
    },
    "B": function (salary) {
        return salary * 2;
    }
};

var calculateBonus = function (level, salary) {
    return strategies[level](salary);
};
calculateBonus('S', 20000)

外观模式

将大型逻辑片段简化为一个简单的函数调用操作

var N = window.N || {};
N.tools = {
    stopPropagation: function (e) {
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.cancelBubble = true;
        }
    },

    preventDefault: function (e) {
        if (e.preventDefault) {
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
    },

    stopEvent: function (e) {
        N.tools.stopPropagation(e);
        N.tools.preventDefault(e);
    }
}

装饰者模式

装饰器模式能够动态地为对象添加功能, 是从一个对象外部来给对象添加功能, 相当于改变了对象的外观。

代理模式

为其他对象提供一种代理以控制对这个对象的访问

function myImage = (function () {
    var imgNode = document.createElement('img');
    document.body.appendChild(imgNode);

    return {
        setImg: function (src) {
            imgNode.src = src;
        }
    }
})()
var proxyImg = (function () {
    var img = new Image();
    img.onload = function () {
        myImage.setImg(this.src);
    };

    return {
        setSrc: function (src) {
            myImage.setImg('img/1.gif');
            img.src = src;
        }
    }
})();

中介者模式

解除对象与对象之间的紧耦合关系

// 库存量
var goods = {
    "roseGold|16G": 10,
    "roseGold|32G": 10,
    "luxuryGold|16G": 10,
    "luxuryGold|32G": 10
};

var colorSelect = document.getElementById("selColor"),
    memorySelect = document.getElementById("selMemory"),
    numberInput = document.getElementById("selNum"),
    colorInfo = document.getElementById("conColor"),
    memeryInfo = document.getElementById("conMemory"),
    numberInfo = document.getElementById("conNum"),
    nextBtn = document.getElementById("nextBtn");

var mediator = (function () {
    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) {
                memeryInfo.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 || (((number - 0) | 0) !== (number - 0))) {
                nextBtn.disabled = true;
                nextBtn.innerHTML = "请选择手机数量";
                return;
            }

            if (number > stock) {
                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);
}
Copyright © Eternally all right reserved,powered by Gitbookmodified at 2019-07-18 09:34:31

results matching ""

    No results matching ""