js策略模式vs狀態模式

2021-09-13 18:55:37 字數 2479 閱讀 3539

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店的培根披薩,過了二十分鐘,你的披薩就來了就可以吃到了。但這個披薩是怎麼做的,到底麵粉放了多少,培根放了多少,佐料放了多少,...