常见三种设计模式

设计模式是什么呢,在百度上从copy下来一段话:
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
总结一句话就是 ,设计模式就是 多年来前辈大牛们的开发设计经验的一个总结,方便后人使用。
常见几种设计模式:

策略模式

策略模式主要针对判断条件居多但是判断条件相对来说简单的程序
比如 redux中的action type的判断

值:对应的代码
const typeobj1 = {
	"DIS"(state,action){
	
	}
}
const typeobj = {
	...typeobj1,
	"ADD"(state,action){
		state.a = action.a;
	},
}
const reducer = (state,action)=> {
	typeobj[action.type] && typeobj[action.type](state,action)
	return {...state}
}

观察者模式/发布订阅模式

特点:
1.要在开发中使用该模式,要做好封装,采用面向对象的方式
2.要能够监听不同的类型;
3.在发布动作触发的时候,要能够给所有的订阅者传递信息
采用面向对象的方式的话,我们需要确定一个实例中应该有哪些属性和方法,我们需要一个events属性用来存储所有的订阅者,但是这里的list不是一个数组,应该是一个对象,因为我们需要对区分不同类型的订阅者,该对象中的属性名将作为订阅者的类型。还需要有on订阅方法,该方法用来执行订阅动作,这里的订阅动作不仅添加订阅者,还需要区分类型,因此会接收两个参数。一个字符串,一个函数。再需要一个发布动作emit,该方法需要接收一个字符串和一个载荷作为参数,字符串决定了触发何种类型的订阅者,载荷可以作为传递给各个订阅者的参数

class watch {
	constructor(){
		this.events =[  ]/ {type:[listener,listener]}  //
	}
	on(type,listener){//订阅
			if(!Array.isArray(this.events[type]) {
				this.events[type] = []
			}
			this.events[type].push(listener)
	}
	emit(type,...reset){//发布
		this.events.type.forEach(item=>{
			item.call(null,...reset);
		})
	}
}

const  w = new Watch()
w.on('ok',(msg)=>{
	console.log(msg)
})
w.emit('ok','helloword')

中间件模式

【fn,fn,fn,fn】
利用中间件模式将异步转为同步

const arr =[
	(next)=>console.log(1),next()
	(next)=>console.log(2),next()
	(next)=>{
		setTimeout(()=>console.log(3),next(),2000)
	},
	()=>console.log(4)
]
function run(arr){
	let index = 0;
	const next = ()=>{
		index ++;
		arr[index](next);
	}
	arr[0](next)
}

其他设计模式列表:

工厂模式

原型模式

过滤器模式

外观模式

代理模式

MVC模式

拦截过滤器模式

空对象模式

装饰器模式

具体内容待完善…

你可能感兴趣的:(原生js)