1.定義:把一些小的演算法,封裝起來,使他們之間可以相互替換(把**的實現和使用分離開來)
2.利用策略模式實現小方塊緩動
html**:
js**:
var container = document.getelementbyid('container');
container.style.height = window.innerheight +"px";
var tween = ,
easein:function(t,b,c,d),
strongeasein:function(t,b,c,d),
strongeaseout:function(t,b,c,d),
sineasein:function(t,b,c,d),
sineaseout:function(t,b,c,d)
};var animate = function(dom);
animate.prototype.start = function(endpos,duration,propertyname,easing)
this.step();
}.bind(this),20)
}animate.prototype.step = function()
var pos = this.easing(t-this.starttime,this.startpos,this.endpos,this.duration);//t動畫已消耗時間、b原始位置、c目標位置、d持續時間
this.update(pos);
}animate.prototype.update = function(pos)
this.dom.style[this.propertyname] = pos +'px';
}//呼叫
var move = document.getelementbyid('move');
var a = new animate(move);
a.start(100,1000,'bottom','sineasein')
3.優缺點
優點:避免多重條件判斷語句;遵循開放-封閉原則,具有較好的擴充套件性,便於切換;可復用性;
缺點:違背最少知識原則(向使用者暴露所有的實現)
1.定義:允許乙個物件在其狀態改變時改變他的行為,物件看起來視乎修改了他的類
2.狀態模式例子:電源開關三種狀態的互相變化(狀態驅動行為)
var light = function()
light.prototype.start = function().bind(this);
}light.prototype.setstate = function(newstate)
//狀態模式的關鍵是把每種狀態都封裝成乙個類
var offlightstate = function(light);
offlightstate.prototype.btnpressed = function()
var weaklightstate = function(light);
weaklightstate.prototype.btnpressed = function()
var stronglightstate = function(light);
stronglightstate.prototype.btnpressed = function()
var light = new light();
light.start();//調弱 調強 關閉
3.狀態模式是狀態機的一種實現方式,還可以直接將狀態委託給字面量,利用function.prototype.call()呼叫,達到和狀態模式一樣的效果
var fmc =
},weak:
},strong:
},superstrong:
},off:
}}var light = function()
light.prototype.start = function().bind(this);
}var l = new light();
l.start();
4.優缺點
優點:可擴充套件性較好,可以方便的增加新的狀態;相比冗餘的if else判斷,狀態模式將邏輯封裝在類中,避免context無限膨脹
缺點:**邏輯分散在各個類中,造成邏輯分散的問題
相同點:這兩種模式都只有乙個上下文、一些策略類或者是狀態類,上下文把請求委託給這些類來執行
不同點:這兩種模式的目的是不同的;策略模式的策略類之間是相互平行平等的,而狀態模式的狀態類把狀態和行為封裝到一起,把邏輯實現封裝到類中,狀態之間的切換也早被規定完成.
策略模式 狀態模式
當設計乙個物件可能在不同情況下有不同的行為時,一般使用的是父類 子類 多型過載的方法,person a new whiteperson person b new blackperson a.speak i m white b.speak i m black 但這樣做不好的地方在於 假如物件建立後了之...
狀態模式和策略模式
策略模式 商場 方案,可以有多種 買x返y,z折扣,積分,直降a。一次 活動可以只選擇其中的一種 策略,彼此之間沒有影響。狀態模式 乙個人一天的工作狀態 早上精神百倍,下午還好,晚上很累。早中晚各是一種狀態,但只有三種狀態聯合起來,才能完成 一天的狀態 這件事情,相當於把一天的狀態分成了三個部分了。...
設計模式 策略模式VS工廠模式
策略模式和工廠模式看著很像,總會讓人混淆,這到底採用的是什麼模式?工廠模式 策略模式 舉例 工廠模式 有一天你決定去吃培根披薩,首先得選擇店鋪,a店和b店都有培根披薩 你點了a店的培根披薩,過了二十分鐘,你的披薩就來了就可以吃到了。但這個披薩是怎麼做的,到底麵粉放了多少,培根放了多少,佐料放了多少,...