設(shè)計(jì)模式
java(23種)
1.單例模式:一個類只能有一個實(shí)例對象惯疙,提供一個全局訪問點(diǎn)。(創(chuàng)建一個變量存放實(shí)例對象 如果對象存在直接返回妖啥,不存在則創(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ā)布==》中間層==》通知訂閱者。