1.单例模式
//单个实例,只有一个对象,多次创建,返回同一个对象
//原理:给构造函数添加静态属性,第一次new对象时,构造函数中没有该静态属性,则添加静态属性,
以后再new对象时,就已经存在该静态属性,直接返回该静态属性(是一个对象)
<script> ???function Person(name,age){ ???????if( !Person.ins){ ???????????Person.ins = { ???????????????name:name, ???????????????age:age, ???????????????eat:function(){ ???????????????????return this.name + "在吃饭"; ???????????????} ???????????} ???????} ???????return Person.ins; ???} ???var p1 = new Person("小明",12); ???var p2 = new Person("张三",22); ???console.log(p1.name,p1.eat());//小明 小明在吃饭 ???console.log(p2.name,p2.eat());//小明 小明在吃饭 ???console.log(p1 == p2);//true</script>
2.观察者模式
观察者只需要记录订阅者的信息(将订阅者记录成一个列表),不需要单独向某个用户进行特殊操作,就能向所有订阅者发送消息
应用场景:
公众号,微博等
例如:
售楼处向客户发送房子信息
首先:记录用户的手机号等信息,记录成一个列表(数组)
其次:发送信息
<script> ???//售楼处,记录客户留下的电话号码 ???var saleHouse = { ???????//arr用于存放电话号码 ???????arr: [], ???????// recode:function(phone){ ???????// ????saleHouse.arr.push(phone) ???????// }, ???????// sendMsg: function (square, money) { ???????// ????for (var i = 0, len = saleHouse.arr.length, arr = saleHouse.arr; i < len; i++) { ???????// ????????console.log("您好" + arr[i] + "先生/女士" + "房子" + square + "平方" + money + "万"); ???????// ????} ???????// } ???} ???//售楼处记录客户留下的电话号码 ???saleHouse.recode = function (phone) { ???????saleHouse.arr.push(phone); ???} ???//售楼处给所有客户发送信息 ???saleHouse.sendMsg = function (square, money) { ???????for (var i = 0, len = saleHouse.arr.length, arr = saleHouse.arr; i < len; i++) { ???????????console.log("您好" + arr[i] + "先生/女士" + "房子" + square + "平方" + money + "万"); ???????} ???} ???//记录 ???saleHouse.recode("张"); ???saleHouse.recode("孙"); ???//发推送 ???saleHouse.sendMsg(100, 200);</script>
js----各种模式
原文地址:https://www.cnblogs.com/SRH151219/p/10478611.html