代理模式
定义:为一个对象提供一个代用品或占位符,以便控制对它的访问。
代理对象和本体对象实现了同样的接口,并且会把任何方法调用传递给本体对象;
举例:
图片预加载、图片懒加载、
合并HTTP请求(代理收集一定时间内的所有HTTP请求,然后一次性发给服务器)、
惰性加载(通过代理处理和收集一些基本操作,然后仅在真正需要本体的时候才加载本体)、
缓存代理(缓存请求结果、计算结果)
知道的越多,不知道的越多
定义:对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。
比如小红最近在淘宝网上看上一双鞋子,但是呢 联系到卖家后,才发现这双鞋卖光了,但是小红对这双鞋又非常喜欢,所以呢联系卖家,问卖家什么时候有货,卖家告诉她,要等一个星期后才有货,卖家告诉小红,要是你喜欢的话,你可以收藏我们的店铺,等有货的时候再通知你,所以小红收藏了此店铺,但与此同时,小明,小花等也喜欢这双鞋,也收藏了该店铺;等来货的时候就依次会通知他们。在上面的故事中,可以看出是一个典型的发布订阅模式,卖家是属于发布者,小红,小明等属于订阅者,订阅该店铺,卖家作为发布者,当鞋子到了的时候,会依次通知小明,小红等,依次使用旺旺等工具给他们发布消息。
设计模式,是一套经过前人总结、业务验证并适合于特定业务开发的代码组织方式,可能会有一些同学会认为设计模式没有用,我这里需要指出设计模式并不是万能的只适合于特定业务场景的开发(对我们的业务开发起到一定的指导作用,所有设计模式的目的都是让开发者编写可维护、易扩展的代码),其实你日常开发中或多或少都使用过设计模式,只是你不知道名字而已(如,绑定事件和触发事件这就是一个简单的发布-订阅模式)。
定义:简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例通常都拥有相同的接口(属性和方法)。
举例:计算器(加、减、乘、除)、自行车售卖(山地、公路)、饮料机(咖啡、牛奶、水)、RPG中职业(战士、法师、射手)
定义:单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
举例::模态框、登录控件、注销控件