前端設(shè)計模式

設(shè)計模式
java(23種)
1.單例模式:一個類只能有一個實例對象,提供一個全局訪問點。(創(chuàng)建一個變量存放實例對象 如果對象存在直接返回,不存在則創(chuàng)建返回)
應(yīng)用:彈窗 axios封裝
···
function student(){
this.name="12";
this.ag="aa"
}
let obj=null; //存放對象
function sin(){
if(obj==null){ //不存在則新建
obj=new student();
}
return obj;
}

let a=new sin(1);
let b=new sin(3);
console.log(a===b); //true
···
2.工廠模式:用固定的方式批量創(chuàng)建對象
應(yīng)用:權(quán)限和角色進(jìn)行判斷

function cat(name,age){
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.tt = function(){
        console.log(this.name);
    }
    return obj;
}
var a1= new cat("王1",10);
var a2= new cat("張2",22);
console.log(a1.tt(),a2.tt()) //王1 張2

3.觀察者模式:多個觀察者,對象發(fā)生變化時,通知所有觀察者,讓他們更新自己的狀態(tài)。

let a={name:"周杰倫"};
let b ={name:"張杰"};

function han(oldV,newV){
    b.name = newV;
    console.log("b的值"+ newV);
}

Object.defineProperty(a,"name",{
    enumerable:true, //當(dāng)前屬性是否可循環(huán)
    configurable:true, //當(dāng)前屬性是否可被設(shè)置
    set:function(val){ //設(shè)置值
        han(name, val); //a name的值變了通知b name也變
        name = val;
    },get:function(){ //獲取值
        return name
    }
})
a.name = "zhoujielun";
console.log(b.name); // b的值zhoujielun zhoujielun

4.發(fā)布訂閱模式和觀察者模式的區(qū)別?
觀察者:觀察者,被觀察者。
訂閱模式:發(fā)布==》中間層==》通知訂閱者。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容