js----各种模式
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>