// 状态模式
// 背景 : 假如说 项目需求 是根据不同的状态执行 不同的方法
// 简单的状态模式:
// 案例背景: 请求ajax后返回的state 有200 有 404 有 500 有 0 有 1 .....
let AjaxState = function(){
// 定义所有状态函数
let states = {
state0 : function(){
console.log('处理第一种情况');
},
state1 : function(){
console.log('处理第二种情况');
},
state2 : function(){
console.log('处理第三种情况');
},
state3 : function(){
console.log('处理第四种情况');
}
}
// 内部状态执行函数
function show (result){
states['state' + result] && states['state' + result]();
}
// 暴露接口
return {
show : show
}
}
// 调用 简单状态模式
let a = new AjaxState();
a.show(1);
// 状态模式 最高级优化
// 背景: 处理多种 参数
// 状态模式函数封装
// 案例背景: 制作游戏 人: 移动、跳跃、射击、蹲下
let MarryState = function(){
// 内部状态私有变量
let _currentState = {};
// 所有动作的方法映射
let states = {
jump : function (){ // 跳跃
console.log('执行跳跃');
},
move : function (){ // 移动
console.log('执行移动');
},
shoot : function (){ // 射击
console.log('执行射击');
},
squat : function(){ // 蹲下
console.log('执行蹲下');
}
}
// 内部状态执行函数
let Action = {
changeState : function (){
let arg = arguments;
// 重置内部状态
_currentState = {};
if(arg.length){
for(let i = 0; i < arg.length; i++){
_currentState[arg[i]] = true;
}
}
// 可以 函数接函数 实现 ‘.’ (点)语法链接函数
return this;
},
goes : function (){
console.log('触发函数');
for (let i in _currentState){
states[i] && states[i]();
}
return this;
}
}
// 暴露接口
return {
change : Action.changeState,
goes : Action.goes
}
}
// 使用类
let b = new MarryState();
b.change('jump','move').goes().change('squat').goes()
状态模式
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 解释器模式 在我们给定一个语言,并定义它的语法和一个解释器,这个解释器用来标识语言中的句子,就是所谓的解释器...
- 标签(空格分隔): 状态模式 策略模式 模板模式 面向接口 状态模式:当一个对象的内在状态改变时,允许改变其行为,...
- 1.状态模式(state) 1.1定义 当一个对象的内在状态改变时容许改变其行为。这个对象看起来像是改变了其类 1...