
JS设计模式之装饰器模式
意图 {#意图} -------- > 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。 > > ------《设计模式:可复用面向对象软件的基础》中文版第132页 在Java中这样的设计可太多了,比如进行IO操作时的`XxxReader`,那么这里就模仿它进行一个应用。 示例 {#示例} -------- 如下: ...
意图 {#意图} -------- > 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。 > > ------《设计模式:可复用面向对象软件的基础》中文版第132页 在Java中这样的设计可太多了,比如进行IO操作时的`XxxReader`,那么这里就模仿它进行一个应用。 示例 {#示例} -------- 如下: ...
意图 {#意图} -------- > 将一个复杂对象的构建与它的表示(即实例对象)分离,使得同样的构建过程可以创建不同的表示 > > ------《设计模式:可复用面向对象软件的基础》中文版第74页 这句话里包含着两个要素:第一个是分离构建与表示,也就是说我们要单独创建一个新的类`XxxBuilder`来进行构建操作;第二个是这个`XxxBuilder`...
意图 {#意图} -------- > 用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 > > ------《设计模式:可复用面向对象软件的基础》中文版第89页 所以这里说的原型类似于对象的蓝图。但是,由于JS的灵活性,这个设计模式对于JS来说不是很重要。 > 因为在像C++这样的静态语言中,类不是对象,并且运行时只能得到很少或者得...
源码 {#源码} -------- 使用[Codepen在线体验](https://codepen.io/kifuan/pen/RwQjrzM)和查看源码。 页面代码 {#页面代码} ------------ 在我们用前端框架的时候,经常用到路由技术,就是在地址栏确实发生了变化但是页面没有刷新,那么本文就介绍通过更改哈希的方式实现这样一种路由,下面是页面代码: |---...
意图 {#意图} -------- > 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 > > ------《设计模式:可复用面向对象软件的基础》中文版第96页 这个概念有些类似于全局变量,它确保所有引用都访问到唯一的实例对象,这可以节省掉创建对象的开销。但是,相应地,在懒加载模式下,它也带来了检查是否已经创建对象的开销。所以还是要根据情况灵活选择...
源码 {#源码} -------- 前往[Codepen](https://codepen.io/kifuan/pen/vYdzpPz)在线体验。 介绍 {#介绍} -------- **防抖** 和**节流**是两个JS中的概念,它们被广泛应用于被频繁触发的事件中,如搜索框在输入时会弹出候选列表:如果每次输入都发送一个AJAX请求来获取数据,那么后台就要被刷爆了。所以,...
意图 {#意图} -------- > 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 > > ------《设计模式:可复用面向对象软件的基础》中文版第167页 尤其是我们在处理不同类型的表单时,这个设计模式就能很好的派上用场。 示例 {#示例} ----...
工厂方法模式 {#工厂方法模式} ---------------- > 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的**实例化延迟到子类**。 > > ------《设计模式:可复用面向对象软件的基础》中文版第81页 在我理解中,所谓工厂方法,是指我们通过**调用已知的接口,获得未知的对象,做出预期的行为**。工厂方法为我们提供...
需求 {#需求} -------- 假设我们有这样一个数据(来源于参考文章中的*浅谈JavaScript函数重载*,链接在文章尾部给出): |---------------|--------------------------------------------------------------------------------| | ``` 1 2 3 ``` | `...
背景 {#背景} -------- 我没有系统性的从头开始学过一遍JS,全凭之前学的其它语言,尤其是Python,直接上手操作了,所以留了不少的坑。 虽然对我来说是一个坑,但我觉得本文更适合放到学习的分类里。 给出下列代码。这里是对原问题的一个抽象,只是把问题的核心单独摘出来了: |------------------------------------|-------...