摘要:狀態模式狀態模式將事物內部的每個狀態分別封裝成類內部狀態改變會產生不同行為。將狀態封裝成不同類打開強光關燈打開弱光初始狀態按鈕非面向對象實現的狀態模式借助于的委托機制可以像如下實現狀態模式打開強光關燈打開弱光按鈕通過完成委托
狀態模式
狀態模式: 將事物內部的每個狀態分別封裝成類, 內部狀態改變會產生不同行為。
優點: 用對象代替字符串記錄當前狀態, 狀態易維護
缺點: 需編寫大量狀態類對象
場景 demo
某某牌電燈, 按一下按鈕打開弱光, 按兩下按鈕打開強光, 按三下按鈕關閉燈光。
// 將狀態封裝成不同類 const weakLight = function(){ this.light = light } weakLight.prototype.press = function(){ console.log("打開強光") this.light.setState(this.light.strongLight) } const strongLight = function(){ this.light= light } strongLight.prototype.press = function(){ console.log("關燈") this.light.setState(this.light.offLight) } const offLight = function(){ this.light= light } offLight.prototype.press = function(){ console.log("打開弱光") this.light.setState(this.light.weakLight) } const Light = function(){ this.weakLight = new weakLight(this) this.strongLight = new strongLight(this) this.offLight = new offLight(this) this.currentState = this.offLight //初始狀態 } Light.prototype.init = function(){ const btn = doucment.createElement("button") btn.innerHTML = "按鈕" document.body.append(btn) const self = this btn.addEventListener("click",function(){ self.currentState.press() }) } Light.prototype.setState = function(state){ this.currentState = state } const light = new Light() light.init()非面向對象實現的狀態模式
// 借助于javascript的委托機制 可以像如下實現狀態模式 const obj = { "weakLight": { press: function(){ console.log("打開強光") this.currentState = obj.strongLight } }, "strongLight": { press: function(){ console.log("關燈") this.currentState = obj.offLight } }, "offLight": { press: function(){ console.log("打開弱光") this.currentState = obj.weakLight } }, } const Light = function(){ this.currentState = obj.offLight } Light.prototype.init = function(){ const btn = document.createElement("button") btn.innerHTML = "按鈕" document.body.append(btn) const self = this btn.addEventListener("click",function(){ self.currentState.press.call(self) //通過call完成委托 }) } const light = new Light() light.init()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106899.html
摘要:什么是狀態模式狀態模式對象行為是基于狀態來改變的。原文地址設計模式手冊之狀態模式優缺點優點封裝了轉化規則,對于大量分支語句,可以考慮使用狀態類進一步封裝。 1. 什么是狀態模式? 狀態模式:對象行為是基于狀態來改變的。 內部的狀態轉化,導致了行為表現形式不同。所以,用戶在外面看起來,好像是修改了行為。 Webpack4系列教程(17篇) + 設計模式手冊(16篇):GitHub地址 博...
摘要:什么是狀態模式狀態模式對象行為是基于狀態來改變的。原文地址設計模式手冊之狀態模式優缺點優點封裝了轉化規則,對于大量分支語句,可以考慮使用狀態類進一步封裝。 1. 什么是狀態模式? 狀態模式:對象行為是基于狀態來改變的。 內部的狀態轉化,導致了行為表現形式不同。所以,用戶在外面看起來,好像是修改了行為。 Webpack4系列教程(17篇) + 設計模式手冊(16篇):GitHub地址 博...
摘要:作者按每天一個設計模式旨在初步領會設計模式的精髓,目前采用和兩種語言實現。享元模式提醒我們將一個對象的屬性劃分為內部和外部狀態。 作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式 :) 個人技術博客-godbmw.com 歡迎來玩! 每周至少 1 篇原創...
摘要:作者按每天一個設計模式旨在初步領會設計模式的精髓,目前采用和兩種語言實現。享元模式提醒我們將一個對象的屬性劃分為內部和外部狀態。 作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式 :) 個人技術博客-godbmw.com 歡迎來玩! 每周至少 1 篇原創...
閱讀 3679·2023-04-26 02:07
閱讀 3181·2021-09-22 15:55
閱讀 2549·2021-07-26 23:38
閱讀 3130·2019-08-29 15:16
閱讀 2020·2019-08-29 11:16
閱讀 1762·2019-08-29 11:00
閱讀 3602·2019-08-26 18:36
閱讀 3174·2019-08-26 13:32